- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Z0第二十六讲(散列结构和散列函数)
数据结构与算法 ---第二十六讲 北方民族大学 计算机科学与工程学院 王伦津 研究员 26、散列结构的概念、散列函数的设计,及冲突的解决 目 录 * * 散列结构和散列函数 本讲的重点:掌握散列结构与散列函数的相关概念,学会散列函数的设计方法,与解决冲突问题的措施 26.1 散列结构 26.1.1 概念 26.1.2 散列技术中的主要问题26.1.3 散列过程 26.1.4 散列函数的设计 26.1.5冲突解决 26.1 散列结构26.1.1 概念 在第一章中,我们已初步介绍过散列,那里,我们是将散列作为一种存储结构介绍的。事实上,散列主要是作为面向检索的存储结构,即检索结构。 与其他检索结构不同,在散列结构上的检索,是基于“计算”的,而“比较”操作退居次要位置。 一个散列结构是一块连续的存储空间,它与一个称为散列函数的函数关联,该函数是数据记录的关键字到地址空间的映射: hash :关键字? 地址 这种存储空间的使用方式为: (a)存储记录时,通过散列函数计算出记录的存储位置: 记录位置=hash (记录的关键字) 并按此存储位置存储记录; (b)访问记录时,同样利用散列函数计算存储位置,然后根据所计算出的存储位置访问记录。 散列也称杂凑或哈希(Hash)。 从上面的说明看出,散列结构不是一种完整的数据存储结构,因为它只是通过数据元素的关键字定位记录,一般很难完整地表达数据元素间的逻辑关系,所以,一般也主要面向检索操作。 显然,由于记录的定位主要基于计算,所以,一般情况下,散列方法的检索速度要比前面介绍过的基于比较的方法高。但是,散列结构的存储利用率一般不高。 26.1.2 散列技术中的主要问题 表面上看,如果只是为了检索操作,设置了散列函数后,只需简单的计算即可。事实上问题并没有这样简单。总结起来,有下列问题: ?? 冲突处理:一般情况下,设计出散列函数很难是单调的,即不同关键字可能对应相同的函数值,这样,就造成地址冲突(碰撞)。 ? 散列函数的设计:设计一个简单、均匀、存储利用高、冲突少的散列函数,是问题的关键。 26.1.3 散列过程 散列方法的一般使用方法是,首先要根据具体问题的特点(记录集的特点、存储空间的限制等)设计散列函数。确定了散列函数和存储空间后,一般的进行过程为: [1] 如果是存储(插入)记录,则提出记录的关键字,用散列函数计算出地址addr; [2] 如果addr处已被其他记录占用(插入冲突),则调用[5],否则,直接将记录存入该位置,结束。 [3] 如果是访问记录(查找,删除、修改等),则提出记录的关键字,用散列函数计算出地址addr; [4] 检查addr处的记录是否为所要查找(定位)的记录,若不是(定位冲突),调用[5];若是,则读出该记录,进行相应的处理,结束; [5] (冲突处理)按既定的冲突处理策略处理冲突。如果是插入冲突,冲突处理是要找一个空位置(返回其);如果是定位冲突,冲突处理是要继续查找所要找的记录,确定记录是否在散列结构中,若是,则返回其位置,否则返回特殊标记。 26.1.4 散列函数的设计 散列函数的设计是个关键问题,也是个复杂问题。但是,散列函数设计一般没有什么严格的规则,只有一些可以遵从的原则。 (一) 设计原则: 根据散列函数的用途,设计散列函数时一般应遵循下列原则: ??? 符合地址空间范围:函数值取值的范围,要在允许的存储空间的地址范围(地址空间)内。 ?? 函数值尽量分布均匀:函数值空间要尽量均匀散布在地址空间,即函数值之间的差要尽量小、尽量接近。这样才保证存储空间的有效使用,并减少冲突。 ??? 函数尽量单调(少冲突):非单调的函数意味着不同的关键字(因变量),可能对应相同的函数值,这样会导致冲突,所以,要尽量使函数具有较少的极值点。 计算简单:散列函数不应该有很大的计算量,否则会降低效率。 下面就介绍几种常见的设计方法。 直接定址法的散列函数为关键字的线性函数: Hash(key) = a*F(key) + b 这里,F是个简单函数(变换),一般负责对关键字进行截取、组合、转换之类的操作。a与b为常数,可用于调节范围和起点。 这种函数的特点是单调(无冲突)、均匀,且范围容易确定。 (二) 直接定址法 例如,若一个数据集如下所示 职工号 姓名 年龄 …
您可能关注的文档
最近下载
- TBNCY002-2023 西双版纳红茶 晒红茶.pdf VIP
- 机关单位人力资源管理中存在的问题及解决对策.docx VIP
- 2025年中级(四级)营销员职业技能鉴定《理论知识》真题卷(后附答案及解析).pdf VIP
- 大数据概论教学课件.pptx VIP
- 西双版纳红茶 晒红茶.docx VIP
- 室内装修全工程施工方案(3篇).docx VIP
- 2025年卫生事业单位招聘考试(中医学基础知识)历年参考题库含答案详解(5卷).docx VIP
- 50个广告分析.doc VIP
- GB32030-2022 潜水电泵能效限定值及能效等级 (2).pdf VIP
- (语文)福州时代中学2020级初一新生入学检测.pdf VIP
文档评论(0)