1313
1414哈希表的原理示例图如下所示:
1515
16- ![ ] ( ../../images/20220114120000 .png )
16+ ![ 哈希表 ] ( ../../images/202405092317578 .png )
1717
1818在上图例子中,我们使用 $value = Hash(key) = key // 1000$ 作为哈希函数。$//$ 符号代表整除。我们以这个例子来说明一下哈希表的插入和查找策略。
1919
2727
2828比如为了查找 ** 「赞」** 这个字的具体意思,我们在字典中根据这个字的拼音索引 ` zan ` ,查找到对应的页码为 $599$。然后我们就可以翻到字典的第 $599$ 页查看 ** 「赞」** 字相关的解释了。
2929
30- ![ ] ( ../../images/20220111174223.png )
30+ ![ 查字典 ] ( ../../images/20220111174223.png )
3131
3232在这个例子中:
3333
@@ -105,7 +105,7 @@ $343246_{13} = 3 \times 13^5 + 4 \times 13^4 + 3 \times 13^3 + 2 \times 13^2 + 4
105105
106106> ** 开放地址法(Open Addressing)** :指的是将哈希表中的「空地址」向处理冲突开放。当哈希表未满时,处理冲突时需要尝试另外的单元,直到找到空的单元为止。
107107
108- 当发生冲突时,开放地址法按照下面的方法求得后继哈希地址:$H(i) = (Hash(key) + F(i)) \mod m$,$i = 1, 2, 3, ..., n (n \le m - 1)$。
108+ 当发生冲突时,开放地址法按照下面的方法求得后继哈希地址:$H(i) = (Hash(key) + F(i)) \mod m$,$i = 1, 2, 3, ..., n (n ≤ m - 1)$。
109109- $H(i)$ 是在处理冲突中得到的地址序列。即在第 1 次冲突($i = 1$)时经过处理得到一个新地址 $H(1)$,如果在 $H(1)$ 处仍然发生冲突($i = 2$)时经过处理时得到另一个新地址 $H(2)$ …… 如此下去,直到求得的 $H(n)$ 不再发生冲突。
110110- $Hash(key)$ 是哈希函数,$m$ 是哈希表表长,对哈希表长取余的目的是为了使得到的下一个地址一定落在哈希表中。
111111- $F(i)$ 是冲突解决方法,取法可以有以下几种:
@@ -122,7 +122,7 @@ $343246_{13} = 3 \times 13^5 + 4 \times 13^4 + 3 \times 13^3 + 2 \times 13^2 + 4
122122
123123使用这三种方法处理冲突的结果如下图所示:
124124
125- ![ ] ( ../../images/20220115162728 .png )
125+ ![ 开放地址法 ] ( ../../images/202405092318809 .png )
126126
127127### 3.2 链地址法
128128
@@ -138,7 +138,7 @@ $343246_{13} = 3 \times 13^5 + 4 \times 13^4 + 3 \times 13^3 + 2 \times 13^2 + 4
138138
139139举个例子来说明如何使用链地址法处理冲突。假设现在要存入的关键字集合 $keys = [ 88, 60, 65, 69, 90, 39, 07, 06, 14, 44, 52, 70, 21, 45, 19, 32] $。再假定哈希函数为 $Hash(key) = key \mod 13$,哈希表的表长 $m = 13$,哈希地址范围为 $[ 0, m - 1] $。将这些关键字使用链地址法处理冲突,并按顺序加入哈希表中(图示为插入链表表尾位置),最终得到的哈希表如下图所示。
140140
141- ![ ] ( ../../images/20220115182535 .png )
141+ ![ 链地址法 ] ( ../../images/202405092319327 .png )
142142
143143相对于开放地址法,采用链地址法处理冲突要多占用一些存储空间(主要是链节点占用空间)。但它可以减少在进行插入和查找具有相同哈希地址的关键字的操作过程中的平均查找长度。这是因为在链地址法中,待比较的关键字都是具有相同哈希地址的元素,而在开放地址法中,待比较的关键字不仅包含具有相同哈希地址的元素,而且还包含哈希地址不相同的元素。
144144
@@ -166,4 +166,4 @@ $343246_{13} = 3 \times 13^5 + 4 \times 13^4 + 3 \times 13^3 + 2 \times 13^2 + 4
166166- 【博文】[ 散列表(上)- 数据结构与算法之美 - 极客时间] ( https://time.geekbang.org/column/article/64233 )
167167- 【书籍】数据结构(C 语言版)- 严蔚敏 著
168168- 【书籍】数据结构教程(第 3 版)- 唐发根 著
169- - 【书籍】数据结构与算法 Python 语言描述 - 裘宗燕 著
169+ - 【书籍】数据结构与算法 Python 语言描述 - 裘宗燕 著
0 commit comments