diff --git a/docs/chapter_hashing/hash_collision.md b/docs/chapter_hashing/hash_collision.md index d2d2f54f5..e2ca18e51 100644 --- a/docs/chapter_hashing/hash_collision.md +++ b/docs/chapter_hashing/hash_collision.md @@ -8,12 +8,13 @@ comments: true **哈希冲突会严重影响哈希表的实用性**。试想一下,如果在哈希表中总是查找到错误的结果,那么我们肯定不会继续使用这样的数据结构了。 -然而,即使我们设计了一个足够好的「哈希函数」,却仍然无法杜绝哈希冲突问题,这是因为: +!!! question "为什么会出现哈希冲突?" -- 哈希表的桶的大小(地址范围)是有限的,只要数据量足够大,理论上一定会出现冲突; -- 哈希函数很难使键值对完全均匀分布,这也增大了冲突发生的可能性。 + 因为 **哈希函数的输入空间往往远大于输出空间**,所以不可避免地会出现多个输入产生相同输出的情况。比如,输入空间是全体整数,输出空间是一个固定大小的桶(数组)的索引范围,那么必定会有多个整数同时映射到一个桶索引。 -虽然理论上哈希冲突无法避免,但我们仍然可以在数据结构与算法的层面缓解冲突问题,尽量保证哈希表的增删查改操作效率。**常见的哈希冲突的解决方案有「链式地址」和「开放寻址」**。 +虽然理论上哈希冲突难以避免,**但我们仍然可以在数据结构层面上缓解哈希冲突所带来的负面影响**,尽量保证哈希表的增删查改操作效率。 + +常见的哈希冲突的解决方案有「链式地址」和「开放寻址」。 ## 链式地址