哈希游戏- 哈希游戏平台- 哈希游戏官方网站
若以下标为000~999的顺序表表示。则查找过程可以简单进行:取给定值(学号)的后三位,便可直接从顺序表中找到待查关键字。基本思想以结点的关键字k为自变量,通过一个确定的哈希函数H,计算出对应的函数值H(k),作为结点的存储位置并将结点存入。顺序查找、折半查找、树的查找是建立在比较基础上的查找,而哈希查找是直接查找。6.5哈希表(Hashtable)冲突和同义词若某个哈希函数H对于不同的关键字得到相同的哈希地址,称为冲突。发生冲突的这两个关键字则称为该哈希函数的同义词。6.5哈希表(Hashtable)已知关键字序列为(14,23,39,9,25,11)。选取关键码与元素位置间的函数为H(k)=k
mod7通过哈希函数对6个元素建立哈希表:253923914冲突举例:H(14)=14%7=011H(25)=25%7=4H(11)=11%7=4冲突!0123456在哈希查找方法中,冲突无法完全避免。构造好的哈希函数所选函数尽可能简单,以便提高转换速度;所选函数对关键码计算出的地址,应在哈希地址集中大致均匀分布,以减少空间浪费。制定好的解决冲突的方案查找时,如果从哈希函数计算出的地址中查不到关键码,则应当依据解决冲突的规则,有规律地查询相关单元。6.5.1哈希函数的构造方法(1)直接定址法(2)除留余数法(3)数字分析法(4)平方取中法(5)折叠法(6)随机数法Hash(k)=a·k+b(a、b为常数)优点:以关键字的某个线性函数值为哈希地址,不会产生冲突;缺点:要占用连续地址空间,空间效率低。例:关键码集合为{100,300,500,700,800,900},选取哈希函数为Hash(k)=k/100,则存储结构(哈希表)如下:00(1)直接定址法Hash(k)=kmodp
用法2:42751896→724+518+69=1311(6)随机数法Hash(k)=random(k)(random为伪随机函数)适用于:关键字长度不等的情况。优点:造表和查找都很方便。6.5.2冲突处理方法(1)开放定址法(开地址法)(2)链地址法(拉链法)(3)再哈希法(双哈希函数法)(4)建立一个公共溢出区(1)开放定址法(开地址法)线性探测法二次探测法伪随机探测法Hi=(Hash(k)+di)mod
越小,发生冲突的可能性越小;反之,发生冲突的可能性越大。1314比较次数431390练习:已知一组关键字为(39,23,41,38,44,15,68,12,06,51,25),则按哈希函数H(k)=k%13和线性探测处理冲突构造所得的哈希表HT[0..14]。22111123查找成功时的平均查找长度查找不成功时的平均查找长度总结在装填因子合适(线)、哈希函数选择合适(与查找键值相关)的情况下,插入、删除、查找效率接近常数级别;和二叉查找树相比,增加了乘、除或取余操作,不能有效找到最小(最大)记录或一个给定范围;比二叉查找树、平衡二叉树容易实现。