静态查找表动态查找表哈希表-(Hash).课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《静态查找表动态查找表哈希表-(Hash).课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 静态 查找 动态 表哈希表 Hash 课件
- 资源描述:
-
1、n静态查找静态查找表表n动态查找表动态查找表n哈希表哈希表 ( (Hash)Hash)问题引入问题引入9.3.1 9.3.1 哈希表 (Hash)nHashHash表又称散列表。表又称散列表。nHashHash函数函数 为为记录存放位置和数据项记录存放位置和数据项( (关键码关键码) )凑凑一个对应关系。一个对应关系。即:记录的存储位置即:记录的存储位置loc = h(key)loc = h(key)n实现立即查找实现立即查找哈希哈希( (Hash)Hash)表表如:如:hash函数函数h(key) = key mod 10, 记录集合为记录集合为No. Name Class 5 Zhang
2、c112 Liu c24 Wang c110 Li c3则则Hash表为表为10 Li c312 Liu c24 Wang c15 Zhang c301234567lockeyC+的保留字的保留字9.3.2 9.3.2 哈希函数的构造方法哈希函数的构造方法n直接定址法直接定址法 n数字分析法数字分析法n平方取中法平方取中法n折叠法折叠法n除留余数法除留余数法 n随机数法随机数法 哈希函数哈希函数例如:有一个从例如:有一个从1到到100岁的人口数字统计表,其中,年龄作为关键岁的人口数字统计表,其中,年龄作为关键字,哈希函数取关键字自身。字,哈希函数取关键字自身。地址地址0102.252627.1
3、00年龄年龄12.252627.人数人数30002000.1050. 、直接定址法、直接定址法、数字分析法、数字分析法有学生的生日数据如下:有学生的生日数据如下:年年.月月.日日75.10.0375.11.2376.03.0276.07.1275.04.2176.02.15.经分析经分析,第一位,第二位,第三位重复的可能性第一位,第二位,第三位重复的可能性大,取这三位造成冲突的机会增加,所以尽量不大,取这三位造成冲突的机会增加,所以尽量不取前三位,取后三位比较好。取前三位,取后三位比较好。3平方取中法平方取中法取关键字平方后的中间几位为哈希函数地址。这是一种比较常用的哈希函数构造方法,但在选定
4、哈希函数时不一定知道关键字的全部信息,取其中哪几位也不一定合适,而一个数平方后的中间几位数和数的每一位都相关,因此,可以使用随机分布的关键字得到哈希函数地址。如图中,随机给出一些关键字,并取平方后的第2到4位为函数地址。 关键字 (关键字)2 函数地址 0100 0010000 010 1100 1210000 210 1200 1440000 440 1160 1370400 370 2061 4310541 310 利用平方取中法得到哈希函数地址 将关键字分割成位数相同的几部分(最后一部分的位数可以不同将关键字分割成位数相同的几部分(最后一部分的位数可以不同),然后取这几部分的叠加和(舍去
5、进位)作为哈希地址,这方法),然后取这几部分的叠加和(舍去进位)作为哈希地址,这方法称为称为。例如:每一种西文图书都有一个国际标准图书编号,它是一个例如:每一种西文图书都有一个国际标准图书编号,它是一个10位位的十进制数字,若要以它作关键字建立一个哈希表,当馆藏书种类的十进制数字,若要以它作关键字建立一个哈希表,当馆藏书种类不到不到10,000时,可采用此法构造一个四位数的哈希函数。如果一本时,可采用此法构造一个四位数的哈希函数。如果一本书的编号为书的编号为0-442-20586-4,则:则:5864586442200224+)04+)04-100886092H(key)=0088H(key)
6、=6092 (a)移位叠加(b)间界叠加5. 5. 除留余数法除留余数法n设计哈希表中允许的地址数设计哈希表中允许的地址数, , 取一个接近于所需大取一个接近于所需大小小 m m 的质数的质数 p p, , 利用以下公式把关键码转换成哈希利用以下公式把关键码转换成哈希地址。哈希函数为:地址。哈希函数为: hashhash ( ( keykey ) = ) = keykey % % p pn其中其中, “%”, “%”是整数除法取余的运算。是整数除法取余的运算。n例:有一个关键码例:有一个关键码 keykey = 962148 = 962148,取质数,取质数 p p= 23= 23。哈希函数哈
7、希函数 hash hash ( ( key key ) =) = key key % % p p。则哈希地址为。则哈希地址为hashhash ( 962148 ) = 962148 % 23 = 12 ( 962148 ) = 962148 % 23 = 12。、随机数法、随机数法选择一个随机函数,取关键字的随机函数值为它的哈希地选择一个随机函数,取关键字的随机函数值为它的哈希地址,即址,即H(key)=random(key) ,其中其中random为随机函数。通常用于关键字长度不等时采为随机函数。通常用于关键字长度不等时采用此法。用此法。哈希哈希(Hash)(Hash)表表n使用哈希方法进行
8、搜索不必进行多次关键码的比较,搜使用哈希方法进行搜索不必进行多次关键码的比较,搜索速度比较快。索速度比较快。n哈希函数是一个压缩映象函数哈希函数是一个压缩映象函数。关键码取值范围比哈希。关键码取值范围比哈希表地址集合大得多。因此很可能经过哈希函数的计算,表地址集合大得多。因此很可能经过哈希函数的计算,把不同的关键码映射到同一个哈希地址上,这就产生了把不同的关键码映射到同一个哈希地址上,这就产生了冲突冲突 ( (Collision)Collision)。n例:一个班的同学有人在同一天过生日的机会是多大?例:一个班的同学有人在同一天过生日的机会是多大? 既然冲突很难避免。所以对于哈希方法,既然冲突
9、很难避免。所以对于哈希方法,需要讨论以下两个重要问题:需要讨论以下两个重要问题:u 对于给定的一个关键码集合,选择一个计算对于给定的一个关键码集合,选择一个计算简单且地址分布比较均匀的简单且地址分布比较均匀的哈希函数哈希函数,避免,避免或尽量减少冲突;或尽量减少冲突;u 拟订解决冲突的方案。拟订解决冲突的方案。两个努力方向两个努力方向 开放地址法开放地址法n若设哈希表中的编址为若设哈希表中的编址为 0 0 到到 m m-1-1,当要加入一,当要加入一个项个项 R R2 2时时, , 用它的关键码用它的关键码 R R2 2. .keykey,通过哈希函,通过哈希函数数 hash hash ( (
10、 R R2 2. .key key ) ) 的计算,得到它的存放地的计算,得到它的存放地址号址号 j j,但是在存放时发现这个位置已经被另,但是在存放时发现这个位置已经被另一个一个R R1 1 占据了。这时发生了冲突,必须处理溢占据了。这时发生了冲突,必须处理溢出。为此,必须把出。为此,必须把 R R2 2 存放到表中存放到表中“下一个下一个”空空位中。如果表未被装满,则在允许的范围内必位中。如果表未被装满,则在允许的范围内必定还有空位。定还有空位。(1) (1) 线性探查法线性探查法 ( (Linear Probing)Linear Probing)n需要搜索或加入一个表项时,使用哈希函数计
11、算号:需要搜索或加入一个表项时,使用哈希函数计算号: H H0 0 = = hashhash ( ( key key ) )n一旦发生冲突,在表中顺次向后寻找一旦发生冲突,在表中顺次向后寻找“下一个下一个”空空 H Hi i 的公的公式为式为: H Hi i = ( = ( H H0 0 + + i i ) % ) % m m, i i =1, 2, =1, 2, , , m m-1-1 亦可写成亦可写成 H Hi i = ( = ( H Hi i-1-1 +1 ) % +1 ) % m m, i i =1, 2, =1, 2, , , m m-1-1 线性探查法线性探查法 例例n假设给出一组
12、表项,它们的关键码为假设给出一组表项,它们的关键码为 Burke, Ekers, Burke, Ekers, Broad, Blum, AttleeBroad, Blum, Attlee, , AltonAlton, Hecht, , Hecht, EderlyEderly。采。采用的哈希函数是:取其第一个字母在字母表中的位置。用的哈希函数是:取其第一个字母在字母表中的位置。 HashHash ( (x x) = ) = ordord ( (x x) - ) - ordord (A A) / /ordord()()是求字符内码的函数是求字符内码的函数n这样,可得这样,可得 Hash Hash
13、(Burke) = 1 (Burke) = 1 HashHash (Ekers (Ekers) = 4) = 4 HashHash (Broad) = 1 (Broad) = 1 HashHash (Hecht) = 7 (Hecht) = 7 HashHash (Attlee (Attlee) = 0 ) = 0 HashHash (Blum) = 1 (Blum) = 1 n又设哈希表为又设哈希表为HTHT2626,m m = 26 = 26。采用线性探查法处。采用线性探查法处理溢出,则上述关键码在哈希表中哈希位置如图所理溢出,则上述关键码在哈希表中哈希位置如图所示。括号内的数字表示找到空
14、位时的比较次数示。括号内的数字表示找到空位时的比较次数。Attlee Burke Broad EkersBlum Hecht n又设哈希表为又设哈希表为HTHT2626,m m = 26 = 26。采用线性探查法处。采用线性探查法处理溢出,则上述关键码在哈希表中哈希位置如图所理溢出,则上述关键码在哈希表中哈希位置如图所示。括号内的数字表示找到空位时的比较次数示。括号内的数字表示找到空位时的比较次数。Attlee Burke Broad EkersBlum Hecht n又设哈希表为又设哈希表为HTHT2626,m m = 26 = 26。采用线性探查法处。采用线性探查法处理溢出,则上述关键码在
展开阅读全文