哈希游戏- 哈希游戏平台- 哈希游戏官方网站
1、常见的哈希函数哈希函数一般来说,一个好的哈希函数应满足下列两个条件:(1)计算简单(2)冲突少3常见的哈希函数构造方法有:直接哈希函数 数字分析法 平方取中法 折叠法 除留余数法 随机数法4哈希函数哈希地址哈希地址01020322出生年份出生年份0出生人数出生人数5H(key)=key+(-1948)解放后每年出生人数的统计:取关键字本身或关键字的某个线性函数值作为哈希地址,即:H(key)=key或H(key)=a*key+b(a,b为常数)。直接哈希函数:哈希地址哈希地址01020322出生年份出生年份0出生人数出生人数H(key
2、)=key+(-1948)解放后每年出生人数的统计:7n=80,d=8,r=10,s=21,2,3,8位分布不均匀,不能取。可取第4、6两位组成的2位十进制数作为每个数据的哈希地址,则图中列出的关键字的哈希地址分别为:45,72,84,03,28,39,51,65,13设个位数的关键字,由个不同的符号组成,此个符号在关键字各位出现的频率不一定相同,可能在某些位上均匀分布,即每个符号出现的次数都接近于次,而在另一些位上分布不均匀。则选择其中分布均匀的s位作为哈希地址,即H(key)=“key中数字均匀分布的s位”82.数字分析法 n=80,d=8,r=10,s=21,2,3,8位分布不均匀,不能
5、04741Q103.平方取中法11以关键字的平方值的中间几位作为存储地址。求“关键字的平方值”的目的是“扩大差别”和“贡献均衡”。即:关键字的各位都在平方值的中间几位有所贡献,Hash值中应该有各位影子。平方取中法思想关键字位数特别多,怎么办?关键字位数较长时,可将关键字分割成位数相等的几部分(最后一部分位数可以不同),取这几部分的叠加和(舍去高位的进位)作为哈希地址。位数由存储地址的位数确定。叠加时有两种方法:移位叠加法,即将每部分的最后一位对齐,然后相加;边界叠加法,即把关键字看作一纸条,从一端向另一端沿边界逐次折叠,然后对齐相加。13dr d2 d1d2rd
6、r+2 dr+1d3rd2r+2 d2r+1+)Sr S2 S1dr d2 d1dr+1d2r-1d2rd3rd2r+2 d2r+1+)Sr S2 S1(a)移位叠加法(b)边界叠加法4.折叠法此方法适合于:关键字的数字位数特别多。取关键字被某个不大于哈希表长度m的数p除后的余数作为哈希地址,即:H(key)=key MOD p(pm)14其中p的选择很重要,如果选得不好会产生很多冲突。比如关键字都是10的倍数,而p=105.除留余数法例 p=21选择一个随机函数,取关键字的随机函数值作为哈希地址,即:H(key)=random(key)其中random为随机函数。156.随机数法实际工作中需根据不同的情况采用不同的哈希函数。通常需要考虑的因素有:计算哈希函数所需时间;关键字的长度;哈希表的大小;关键字的分布情况;记录的查找频率。我有一个电话号码本,怎么根据姓名建立哈希表呢?