散列

散列

散列表就是一个包含关键字的具有固定大小的数组。其优势在于以常数平均时间执行插入、删除和查找工作。

解决冲突

  • 分离链接法:数组中包含的是一个链表,链表中的是冲突了的关键字

  • 开放地址法:完全使用数组实现。如果有冲突发生,就尝试另外的单元,尝试h0(X),h1(X),h2(X),其中hi(X) = Hash(X) + F(i)。由于不同的F(i),因此分为:

    • 线性探测法:F(i) = i 装填因子不能接近于1
    • 平方探测法:F(i) = i^2 装填因子不能大于0.5
    • 双散列:F(i) = i * Hash2(X),也即就是再使用一个哈希函数

再散列

对于使用平方探测的开放定址散列法,如果表的元素填的太满,那么操作的运行时间就会开始消耗的过长,且Insert操作可能会失败。所以进行再散列,也就是扩充原来表的大小。一般扩充为比原来的两倍大,且为素数的一个数

可扩散列

当散列表过大而装不进主存的时候使用。

原文地址:https://www.cnblogs.com/evansyang/p/5871267.html