- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* * 3.除法杂凑函数 h(K)=K mod M ,其中K为记录的关键词,M为杂凑表容量。 例:h(THE)= 10100 01000 00101 mod 31 =2074110 mod 31= 2 注意合理选择M值,M一般为素数。 4. 乘法杂凑函数 给定一个实数θ,0<θ<1,则按如下的方式给出一个杂凑函数. H(K)=?M(Kθ mod 1)? 一般来说,当θ≈0.6180339887或θ= 013 时,杂凑函数能均匀地分布在[0,M-1]上. 一、线性表的查找 二、树形结构的查找 三、散列(杂凑) 8.9.1 散列表(杂凑表)的定义 8.9.2 散列函数的构造 8.9.3 冲突调解 3、冲突调节 冲突调节方法 1.拉链法 2. 线性探查 3. 双重杂凑 1. 拉链法 假定表T包含M个散列地址T[0],T[l],…,T[M-l],拉链就是令散列地址等于i的记录组成一个链表,且指针T[i]是该单链表的头指针. 为了节约存储空间, 改进的方法是将每个T[i]分成两个域,一个域存放记录,另一个域为LINK,存放指针,指向具有相同杂凑地址的下一个记录。 当插入关键词K时,如若发现T[h(K)]处已包含别的记录,则沿LINK一直找下去,直到一个表地址的LINK值为空.然后找到一个空的表地址T[free],把K存储在T[free]处,并置最后一个空LINK域的值为free. 寻找空地址可由T[M-l]开始,向T[0]方向搜索. -1 ?8 -1 10 9 8 7 6 5 4 3 2 1 0 ?45 ?7 20 -1 ?6 -1 1 -1 17? ? ? -1 37? ? -1 2? -1 23 10? ?66 ?-1 关键词序列为:20, 17, 2, 23, 45, 66, 6, 37, 1 杂凑函数:h(k)=K%11 冲突调节:拉链法 -1 -1 ? ? ? ? 算法C ( TABLE[ ],K, M . ) /*对给定变元K,本算法检索M个结点的表。若K不在表中且表不满,则把K插入表中。本算法使用了一个散列函数h(K) . R是一个辅助变量,用于找到空的空间;R有初始值,R = M +1. */ C1.[散列] 置i ? h (K) +1 (现在1 ? i ? M,为检索K,取K的散列位置i = h (K) +1,去检索TABLE [i] ) . C2.[有链表吗?] 若TABLE[i] 为空,则转到步骤C6. C3.[比较] 若K = KEY[i],则本算法以成功告终. C4.[查下一个]若LINK[i] ? Λ,则置i ? LINK[i] 并返回步骤C3. C5.[找空结点] (已查完由TABLE[h(K)+1]开始的链表,检索不成功,故应该插入K,所以需要在表中找一个空位置).令R减1(R初值为M +1),进行此操作一次或多次直到TABLE[R]是空为止.若R = 0(表明已经没有剩余的空结点),则本算法以溢出告终;否则,置LINK[i] ? R,i ? R. C6.[插入K] 标记TABLE[i]为已占用,置KEY[i] ? K,LINK[i] ? Λ,算法以插入成功告终。? 2. 线性探查 线性探查完全废除链接,以固定的次序检索表中的结点,直到找到一个关键词为K的结点或者找到一个空缺位置. 其循环探查路径: h(K),h(K)+1,…,M-1,0,1,…,h(K)-1 10 9 8 7 6 5 4 3 2 1 0 20 ? 6 17 ?1 37 ?45 2? 23 ?66 关键词序列为: 20, 17, 2, 23, 45, 66, 6, 37, 1 散列函数:h(k)=K%11 冲突调节:线性探查 线性探查查找和插入算法 L ( TABLE[ ],K, M . ) /* 在一个包含M个结点的表中查找一个给定的关键词K. 如果 K 不在表中且表不满,则插入 K.变量N记录已占用的结点数*/ L1.[散列] 置 i ? h (K) . //有0 ? i ? M L2.[比较] 若TABLE [i]为空,则转 L4; /*去插入 K */ 否则,若KEY [i] = K,则本算法以检索成功结束. L3.[查下一个] 置 i ? i?1;若 i ? M, 则置i ? i ?M.返回L2 . L4.[插入 K ] 若N =
文档评论(0)