散列表

散列表

散列函数

  • 除法散列法

    [h(k) = kmod m ]

    其中k为关键字的自然数表示,m为散列表长度

  • 乘法散列法

    [h(k) = m(kAmod1) ]

    其中A为常数0<A<1,即(kAmod1)是取kA的小数部分

开放寻址法

所有元素都存放在散列表中,每个表项或包含一个元素或者为空。当查找某个元素时,要系统的检查所有表项。

  • 线性探查

    通过一个散列函数h()找到一个初始的表项h(k),如果该位置为空则插入k值,否者探查h(k)+1,直到探查完整个序列;查找时方法类似。优势在于实现简答,但容易出现群集,使得平均查找时间变大。

  • 二次探查

    找到初始表项h(k),后续探查位置为(h(k)+c_1i+c_2i^2),其中(c_1,c_2)常数,i为(0,1,2...),直到探查整个序列。

    探查效果比线性好,但也可能出现群集

  • 双重散列

    找到初始表项h(k),后续探查位置为(h(k)+ih_2(k)),其中h2()是另一个散列函数,i为(0,1,2...)。

    如果散列函数合适,探查效果最好,其性能非常接近理想的均匀散列!

  • 散列分析

    假设装载因子为(α<frac nm<1),且是均匀散列的。则对于一次不成功的查找,其期望的探查次数为 $1/(1-α) $ ;插入一个元素期望的探查次数为(1/(1-α));一次成功查找期望次数为(frac1αlnfrac1{1-α})

原文地址:https://www.cnblogs.com/k-blog/p/14225716.html