Simplify the contents of the sorting algorithms.

This commit is contained in:
krahets
2023-03-25 18:41:22 +08:00
parent 9b0bdd929f
commit 22898b6955
8 changed files with 40 additions and 59 deletions
+3 -3
View File
@@ -6,7 +6,7 @@
为了缓解哈希冲突,一方面,**我们可以通过哈希表扩容来减小冲突概率**。极端情况下,当输入空间和输出空间大小相等时,哈希表就等价于数组了,每个 key 都对应唯一的数组索引,可谓“大力出奇迹”。
另一方面,**考虑通过优化哈希表的表示来缓解哈希冲突**,常见的方法有「链式地址」和「开放寻址」。
另一方面,**考虑通过优化哈希表的表示来缓解哈希冲突**,常见的方法有「链式地址 Separate Chaining」和「开放寻址 Open Addressing」。
## 哈希表扩容
@@ -18,14 +18,14 @@
## 链式地址
在原始哈希表中,每个桶只能存储一个元素(即键值对。**考虑将单个元素转化成一个链表,将所有冲突元素都存储在一个链表中**。
在原始哈希表中,每个桶只能存储一个键值对。**链式地址考虑将单个元素转化成一个链表,将键值对作为链表结点,将所有冲突键值对都存储在一个链表中**。
![链式地址](hash_collision.assets/hash_collision_chaining.png)
链式地址下,哈希表操作方法为:
- **查询元素**:输入 key ,经过哈希函数得到数组索引,即可访问链表头结点,再通过遍历链表并对比 key 来查找键值对。
- **添加元素**:先通过哈希函数访问链表头,再将结点(即键值对)添加到链表头部即可。
- **添加元素**:先通过哈希函数访问链表头结点,再将结点(即键值对)添加到链表即可。
- **删除元素**:同样先根据哈希函数结果访问链表头部,再遍历链表查找对应结点,删除之即可。
链式地址虽然解决了哈希冲突问题,但仍存在局限性,包括: