MIT算法导论-第7,8讲-哈希表

1.哈希函数的选择

一个好的哈希函数H需要哪些特点:

1.keys均匀的映射到表的槽内

2.键值的分布特性应该不影响这种均匀性质

选择的策略主要有两种:除法散列法 ,乘法散列法。

(1)除法散列法: 定义hash函数为 h(k) = k mod m

m的原则就是m选为质数且不能太接近2或者10的幂次。

原因:键值的低位可能具有某种分布规律,如果选择2或者10的幂次容易出现冲突。

(2)乘法散列法:设m=2^r, 计算机是w-bit 长的字,然后定义哈希函数是h(k) = (A*k mod 2^w) rsh (w-r)

其中A是一个在(2^w-1, 2^w)范围内的奇数。

我们来分析这个哈希函数(A*k mod 2^w)这一部分就是将乘法得到的结果只取一个字长 ,然后再rsh w-r位,就刚好只保留了最大是m的结果,可以很好的映射到表中。

《MIT算法导论-第7,8讲-哈希表》

假设m=2^3, 字长w是7-bit ,考虑那个乘法过程:

《MIT算法导论-第7,8讲-哈希表》

这就像一个幸运大转轮一样,将A转k圈,得到最后的一个结果。

这个哈希函数的好处是,最后的取得h(k)实际上和每一位上的k值都相关,而A和2^w这两个数是互质的,所以想象一个轮盘,周长是2幂,A肯定不是周长的倍数,k是转了多少圈,那么最后的h(k)就会有可能落到轮盘的任意位置。

2.开放寻址法

开放寻址法不成功搜索的预期探寻次数:

对于一个开放寻址的哈希表,α=n/m<1,那么一次不成功搜索的预期探寻次数为1/(1-α).

预期探寻次数1/(1-α)是怎样算出来的,如下:

1.首先,查询一个值至少需要1次探寻

2.有n/m的可能性会发生碰撞,我们需要第二次探寻

3.有(n-1)/(m-1)的可能性第二次探寻也发生了碰撞

……

3观察到(n-i)/(m-i)<α i=1,2,3……n

《MIT算法导论-第7,8讲-哈希表》

全域哈希,完全哈希

http://www.cnblogs.com/soyscut/p/3396216.html?utm_source=tuicool&utm_medium=referral
http://www.guokr.com/blog/483599/

    原文作者:哈希算法
    原文地址: https://blog.csdn.net/qing0706/article/details/50245259
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞