散列原理
不同数据结构访问方式:循秩、循位置、循关键码、循值
| Vector | List | BST | Hashing |
|---|---|---|---|
| rank | posi | key | value |
实例:设置散列表长M,实现key到value的映射,此处的hash函数为key对M取模余
1.散列表长M应与value总数N同阶同次
2.
λ
=
N
/
M
\lambda=N/M
λ=N/M称为填装因子


散列函数
M-A-D法
multiply-add-divide

平方取中
取key的平方的中间若干位,构成地址,这样原关键码中的各位对于最终的散列有平均的影响力

折叠汇总

伪随机数法

排解冲突
多槽位法
将每个桶划分为多个槽位

独立链
每个桶存放一个指针,冲突的词条组成列表

开放定址
为每个桶都事先约定好若干备用桶, 每一个桶单元面向所有词条开放,所有桶单元位于一段连续的内存空间
开放寻址法的核心思想是,如果出现了散列冲突,我们就重新探测一个空闲的位置
线性试探:当我们往散列表中插入数据时,如果某个数据经过散列函数之后,存储的位置已经被占用了,我们就从当前位置开始,依次往后查找(到底后从头开始),看是否有空闲位置,直到找到为止。
查找数据:通过散列函数求出要查找元素的键值对应的散列值,然后比较数组中下标为散列值的元素和要查找的元素是否相等,若相等,则说明就是我们要查找的元素;否则,就顺序往后依次查找。如果遍历到数组的空闲位置还未找到,就说明要查找的元素并没有在散列表中。
桶排序(计数排序)
复杂度为O(n+M),n为排序数量,M为元素取值范围,很多情况下M=O(n)或者远小于n,则可在线性复杂度O(n)内完成排序
思想:划分多个范围相同的子区间,每个桶为一个子区间,将各个元素分配到各个桶中,每个子区间再排序,最后合并
子区间(桶)个数自己决定

本文深入探讨了数据结构中散列的基本原理,包括散列函数的设计如M-A-D法、平方取中法,以及解决冲突的策略如多槽位法、独立链和开放定址。此外,还介绍了桶排序的概念及其在特定场景下的高效性。

340

被折叠的 条评论
为什么被折叠?



