- 1、本文档共96页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
利用开放定址法中的线性探查法处理冲突进行散列存储和查找的过程。 例: 散列函数为:h(K)=K%13 线性表 B=(18, 75, 60, 43, 54, 90, 46, 31, 58, 73, 15, 34) 用线性探查法 B=(18, 75, 60, 43, 54, 90, 46, 31, 58, 73, 15, 34) h(K)=K%13; 例:一棵四阶B_树 a 62 1 38 b 15 2 c 80 1 d Λ 8 Λ 1 Λ 32 Λ 25 e Λ 20 Λ 3 f Λ 54 Λ 1 Λ 73 g Λ 65 Λ 2 Λ 96 h Λ 87 Λ 2 B_树的结点类型定义: const int m={ B_树的阶数 }; struct MBNode { int keynum ; //关键字个数域 MBNode* parent ; //指向父结点的指针域 KeyType key[m+1] ; // 保存n个关键字的域 MBNode* ptr[m+1] ;//保存n+1个指向子树的指针域 int recptr[m+1] ; //保存每个关键字对应记录的存储 //位置域 } ; 8.5.2 B_树查找 在B_树上进行查找通常需要经过同多个关键字比较后才能处理完一个结点,因此又称 B_树为多路查找树 在 B_树中查找一个关键字等于给定值 K 的 过程: 若B_树非空,首先取出树根结点,使给定值 K依次同该结点中的每一个关键字进行比较,直到 K≤Ki (1≤ i≤ n+1)时为止,此时若 K=Ki,则查找成功,否则在该结点的由Pi -1所指向的子树上继续进行查找即可,直到查找成功或失败为止。 a 62 1 38 b 15 2 c 80 1 d Λ 8 Λ 1 Λ 32 Λ 25 e Λ 20 Λ 3 f Λ 54 Λ 1 Λ 73 g Λ 65 Λ 2 Λ 96 h Λ 87 Λ 2 查找 73 a 62 1 38 b 15 2 c 80 1 d Λ 8 Λ 1 Λ 32 Λ 25 e Λ 20 Λ 3 f Λ 54 Λ 1 Λ 73 g Λ 65 Λ 2 Λ 96 h Λ 87 Λ 2 查找 56 int Search (MBNode* MT, keyType K) { int i , n ; MBNode* p=MT; while ( p!=NULL ) { n=p-keynum ; i=1 ; p-key[n+1]=MaxKey ; while ( Kp-key[i] ) i++ ; if ( K = = p-key[i] ) return p-recptr[i] ; else p=p-ptr[i-1] ; } return -1 ; } B_树查找算法 18 75 60 43 54 90 46 散列函数: h ( K ) = K % m m=13 90 75 60 46 18 43 54 0 1 2 3 4 5 6 7 8 9 10 11 12 H 例: 冲突:一个待插入元素的散列地址单元已被占用,使得该元素无法直接存入到此单元中。 同义词:具有不同关键字而具有相同散列地址 的元素 同义词冲突:由同义词引起的冲突 在散列存储中,发生冲突的可能性主要与三个因素有关: 一、与装填因子 α 有关(装填因子是指散列表中已存入的元素数 n 与散列表空间大小 m 的比值, α = n / m。 二、与所采用的散列函数有关 三、与解决冲突的方法有关。 8.4.2 散列函数 1. 直接定址法: h ( K ) = K + C 2. 除留余数法: h ( K ) = K % m 3、数字分析法 4、平方居中法 5、折叠法 若是非数字关键字,则需先对其进行数字化处理。 8.4.3 处理冲突的方法 “处理冲突” 的实际含义是: 为产生冲突的地址寻找下一个哈希地址。 1. 开放定址法: 2. 链接法: 1、 开放定址法: 开放定址法就是从发生冲突的那个单元开始,按照一定的次序,从散列表中查找出一个空闲的存储单元,把发生冲突的待插入元素存入到该单元中的一类处理冲突的方法。 在开放定址法中,空闲单元即向同义词
文档评论(0)