- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构--第八章-查找教案
B树的分裂算法 void split (Mbtree oldp, Mbtree *newp) {/* B树的分裂过程 */ s=ceil((float)m/2); /* s=?m/2 ? */ n=m-s; newp=(Mbtree)malloc(sizeof(Mbtnode)); newp-keynum=n; newp-parent=oldp-parent; newp-ptr[0]=oldp-ptr[s]; For (i=1 ; i=n ; i++) { newp-key[i]=oldp-key[s+i];newp-ptr[i]=oldp-ptr[s+i];} oldp-keynum=s-1; } * 4. 在B树中删除一个关键字 1)在最下层结点中删除一个关键字(见p217的图8.21) 结论: 当最下层结点中的关键字数 大于?m/2 ? -1 时 ,可直接删除。 当最下层待删关键字所在结点中关键字数目为最低要求?m/2 ? -1时,如果其左(右)兄弟中关键字数目大于?m/2 ? -1 ,则可采用上述“父子换位法”。 当最下层待删结点及其左右兄弟中的关键字数目均为最低要求数目?m/2 ? -1时,需要进行合并处理,合并过程与插入时的分裂过程“互逆”,合并一次,分支数少一,可能出现 “连锁合并”,当合并到根时,各分支深度同时减1。 * 2)在非最下层结点中删除一个关键字 示例见p217的图8.22所示。 一般情况下,删除非最下层结点中的关键字,可转化为删除最下层结点中的关键字。 * 8.4 计算式查找法-哈希法 哈希法又称散列法、杂凑法以及关键字地址计算法等,相应的表称为哈希表 。 哈希法的基本思想: 首先在元素的关键字k和元素的存储位置p之间建立一个对应关系f,使得p=f(k),f称为哈希函数。创建哈希表时,把关键字为k的元素直接存入地址为f(k)的单元;以后当查找关键字为k的元素时,再利用哈希函数计算出该元素的存储位置p=f(k),从而达到按关键字直接存取元素的目的。 * 8.4.1 哈希函数的构造方法 构造原则: ①函数本身便于计算 ; ②计算出来的地址分布均匀,即对任一关键字k,f(k) 对应不同地址的概率相等,目的是尽可能减少冲突。 * 构造方法: 1.数字分析法:如果事先知道关键字集合,并且每个关键字的位数比哈希表的地址码位数多时,可以从关键字中选出分布较均匀的若干位,构成哈希地址。 2.平方取中法:当无法确定关键字中哪几位分布较均匀时,可以先求出关键字的平方值,然后按需要取平方值的中间几位作为哈希地址。 * 3.分段叠加法:这种方法是按哈希表地址位数将关键字分成位数相等的几部分(最后一部分可以较短),然后将这几部分相加,舍弃最高进位后的结果就是该关键字的哈希地址。具体方法有折叠法与移位法。 ? 1 2 3 1 2 3 6 0 3 3 0 6 2 4 7 2 4 7 1 1 2 2 1 1 +) 0 2 0 +) 0 2 0 ————— —————— 1 1 0 5 9 0 7 ?(a)移位叠加 (b) 折叠叠加 * 4.除留余数法:假设哈希表长为m,p为小于等于m的最大素数,则哈希函数为: H(k)=k%p其中%为模p取余运算。 5.伪随机数法:采用一个伪随机函数做哈希函数,即h(key)=random(key)。 在实际应用中,应考虑的因素有: 计算哈希函数所
文档评论(0)