发布时间:2025-01-24 10:51:58 点击量:
HASH GAME - Online Skill Game GET 300
第9章查找 静态查找表 动态查找表 哈希表 什么是哈希表 哈希函数的构造方法 处理冲突的方法 哈希表的查找及其分析 什么是哈希表哈希表技术的主要目标是提高查找效率。 1. 哈希函数: 根据关键字直接计算出元素所在位置的函数。例:设哈希函数为: H(K)= K/3+1 ,则构造关键字序列为 1、2、5、9、11、13、16、21、27 的散列表(哈希表)为: 11 2 27 21 16 13 951 H(K) 10 987654321序号 。 11 2 27 21 16 13 951 H(K) 10 987654321序号 H(key ) 和处理冲突的方法将一组关键字映象到一个有限的连续的地址集(区间)上,并以关键字在地址集中的“象”作为记录在表中的存储位置,这种表便称为哈希表, 这一映象过程称为哈希造表或散列,所得存储位置称为哈希地址或散列地址。在哈希存储中,若发生冲突,则必须采取特殊的方法来解决冲突问题,才能使哈希查找能顺利进行。虽然冲突不可避免,但发生冲突的可能性却与三个方面因素有关。(1) 装填因子α; 装填因子是指哈希表中己存入的元素个数 n 与哈希表的大小 m 的比值,即α=n/m (α=1 )。α越小,发生冲突的可能性越小,反之,发生冲突的可能性就越大。但是, α太小又会造成大量存贮空间的浪费,因此必须兼顾存储空间和冲突两个方面。(2) 所构造的哈希函数; (3) 解决冲突的方法。①构造好的哈希函数,使冲突尽可能的少②设计有效的解决冲突的方法第9章查找 静态查找表 动态查找表 哈希表 什么是哈希表 哈希函数的构造方法 处理冲突的方法 哈希表的查找及其分析 哈希函数的构造方法例: 关键码集合为{ 100 ,300 ,500 ,700 ,800 ,900 } , 选取哈希函数为 Hash(key )=key/100 ,则存储结构(哈希表)如下: ,即(K)=K 或H(K)=a * K + b (其中 a、b为常数)。 0 1 2 3 4 5 6 7 8 9 900 800 700 500 300 100 优点: 以关键码 key 的某个线性函数值为哈希地址,不会产生冲突。缺点: 要占用连续地址空间,空间效率低。 m 的数 p 除后所得的余数为哈希函数。即 H(K)=K mod p (p≤m) 经验得知:一般可选 p 为质数或不包含小于 20 的质因素的合数。 。因为中间几位与数据的每一位都相关。例: 2589 的平方值为 6702921 ,可以取中间的 029 为地址。选用关键字的某几位组合成哈希地址。选用原则应当是:各种符号在该位上出现的频率大致相同。 3 4 7 0 5 2 4 3 4 9 1 4 8 7 3 4 8 2 6 9 6 3 4 8 5 2 7 0 3 4 8 6 3 0 5 3 4 9 8 0 5 8 3 4 7 9 6 7 1 3 4 7 3 9 1 9 例: 有一组(例如 80个)关键码,其样式如下: 讨论: ①第1、2位均是“3和4”,第 3位也只有“7、8、9”,因此,这几位不能用, 余下四位分布较均匀,可作为哈希地址选用。位号: ①②③④⑤⑥⑦②若哈希地址取两位(因元素仅 80 个),则可取这四位中的任意两位组合成哈希地址,也可以取其中两位与其它两位叠加求和后,取低两位作哈希地址。