• 散列表(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.

  • 相关阅读:
    lombok介绍
    idea 离线安装 lombok插件
    Java中Lambda表达式的使用
    接口里的default,static方法
    Maven多环境配置实战 filter
    redis lua脚本学习
    redis的安装
    jdbc插入或查询数据库时间总是比实际时间少8小时原因
    [设计模式]单件模式
    [设计模式]命令模式
  • 原文地址:https://www.cnblogs.com/null00/p/2469811.html
Copyright © 2020-2023  润新知