散列表(Hash Table)总结

复习了下散列表(Hash Table),总结如下:
1.直接寻址表
   直接送数组进行对应,但是当要存储的关键字集合K相对于域U很小时,就会很浪费空间。
2.散列表
   利用Hash函数进行映射
   “碰撞”发生时,利用链接法解决
3.散列函数的选择
   3.1除法散列表
        h(k) = k mod m,m是与2的整数幂不太接近的质数
   3.2乘法散列表
        h(k) = 【m*(k*A mod 1)】向下取整,其中A最好取0.618.......
   3.3全域散列
        ha,b(k) = ((a*k + b) mod p) mod m,a属于{1, 2 ..., p-1},b属于{0, 1 ..., p-1},p是质数,k都落在{0, 1, ..., p-1}中,p > m
4.开放寻址法
   4.1线性探查
        h(k, i) = (h'(k) + i) mod m, 其中i = 0, 1, ..., m-1,但容易造成一次群集,即随着时间的推移,连续被占用的槽不断增加,平均查找时间也随着不断增加。
   4.2二次探查
        h(k, i) = (h'(k) + c1*i + c2*i2) mod m,其中h'(k)为辅助散列函数,c1和c2为辅助常数,i = 0, 1, ..., m-1,虽比线性探查优化了一点,但会造成二次群集。
   4.3双重散列
        h(k, i) = (h1(k) + i*h2(k)) mod m,其中h2(k)的值要与表的大小m互质,如我们可以取m为一质数
        h1(k) = k mod m,h2(k) = 1 + (k mod m'),m’略小于m,可以取值为m-1.

posted on 2012-04-25 14:45  NULL00  阅读(1152)  评论(3编辑  收藏  举报

导航