哈希表或散列表

在直接寻址方式下,具有关键字k的元素被存放在槽k中。

在散列方式中,该元素存放在slot h(k)中;即利用散列函数(hash function)h由关键字k计算出槽slot的位置。这里,函数h将关键字的全域U映射到散列表(hash table)T[0..m-1]的槽位上

哈希表或散列表_第1张图片


用一个散列函数h将关键字映射到散列表的槽中,关键字有时会映射到同一个槽中,这就发生了碰撞(collision)

哈希表或散列表_第2张图片


一、解决散列碰撞(collision)的方法

(1)链接法

(2)开放寻址法

a.线性探测:h(k, i) = (h'(k) + i) mod m

b.二次探测:h(k, i) = (h'(k) + c1*i + c2 *i^2) mod m

c.双重散列:h(k, i) = (h1(k) + i * h2(k)) mod m

(3)完全散列:设计一个较小的二次散列表


二、散列函数(哈希函数)的选择

(1)若函数为h(k)=k,就是直接寻址表

(2)除法散列法:h(k) = k mod m (mod 模)

(3)乘法散列法:h(k) = m * (k * A mod 1) (0<A<1)

(4)全域散列:从一组仔细设计的散列函数中随机地选择一个。(即使对同一个输入,每次也都不一样,平均性态较好)


===END===


你可能感兴趣的:(哈希表或散列表)