zoukankan      html  css  js  c++  java
  • 散列表(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.

  • 相关阅读:
    财务自由之路--笔记
    Spring Cloud微服务笔记(一)微服务与云概念
    Java8新特性----Stream
    Docker操作笔记(四)使用网络
    Docker操作笔记(三)数据管理
    Docker操作笔记(二)容器
    Docker操作笔记(一)使用镜像
    信息化领域热词分类分析及解释
    假期第二周总结
    假期第一周总结
  • 原文地址:https://www.cnblogs.com/null00/p/2469811.html
Copyright © 2011-2022 走看看