【算法导论】第11章,散列表

散列表是实现字典的一种数据结构,是普通数组的推广,

原理是根据关键字计算出下标,用链接的方法解决冲突。

11.1 直接寻址表

如果关键字全集比较小,可以直接寻址。

11.2 散列表

用散列函数h, 计算关键字k所在的位置为 h(k)。

这一步可以产生冲突,将不同的关键字映射到同一个槽内。

介绍两种解决冲突的方法:链接法、开放寻址法

链接法:

冲突链接到同一个链表中,

插入、删除的时间都是O(1),(删除不需要搜索)。双链表删除比较快。

查找性能?

n个元素,m个槽位,装载因子 n/m

只要槽位与元素数量成正比,那么查找时间就是O(1)

11.3 散列函数

好的散列函数的标准:均匀,相近的最好不在一起,

可以将关键字转换为自然数。以下的针对关键字为自然数的情况。

除法散列法: h(k) = k mod m。如果m是2的n次幂的话要小心。

乘法散列法:h(k) = m(kA mod 1) 其中A是一个0-1之间的小数,

  优点:对m的选择不太关键,可以选择2的幂次,

全域散列法:待学习

11.4 开放寻址法

 待学习

猜你喜欢

转载自www.cnblogs.com/yesuuu/p/8968536.html