mirror of
https://github.com/krahets/hello-algo.git
synced 2026-08-15 21:20:58 +00:00
build
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
comments: true
|
||||
---
|
||||
|
||||
# 6.2. 哈希冲突
|
||||
# 6.2 哈希冲突
|
||||
|
||||
上节提到,**通常情况下哈希函数的输入空间远大于输出空间**,因此理论上哈希冲突是不可避免的。比如,输入空间为全体整数,输出空间为数组容量大小,则必然有多个整数映射至同一数组索引。
|
||||
|
||||
@@ -13,7 +13,7 @@ comments: true
|
||||
|
||||
哈希表的结构改良方法主要包括链式地址和开放寻址。
|
||||
|
||||
## 6.2.1. 链式地址
|
||||
## 6.2.1 链式地址
|
||||
|
||||
在原始哈希表中,每个桶仅能存储一个键值对。「链式地址 Separate Chaining」将单个元素转换为链表,将键值对作为链表节点,将所有发生冲突的键值对都存储在同一链表中。
|
||||
|
||||
@@ -1152,7 +1152,7 @@ comments: true
|
||||
|
||||
当链表很长时,查询效率 $O(n)$ 很差,**此时可以将链表转换为「AVL 树」或「红黑树」**,从而将查询操作的时间复杂度优化至 $O(\log n)$ 。
|
||||
|
||||
## 6.2.2. 开放寻址
|
||||
## 6.2.2 开放寻址
|
||||
|
||||
「开放寻址 Open Addressing」不引入额外的数据结构,而是通过“多次探测”来处理哈希冲突,探测方式主要包括线性探测、平方探测、多次哈希等。
|
||||
|
||||
@@ -2448,7 +2448,7 @@ comments: true
|
||||
|
||||
与线性探测相比,多次哈希方法不易产生聚集,但多个哈希函数会增加额外的计算量。
|
||||
|
||||
## 6.2.3. 编程语言的选择
|
||||
## 6.2.3 编程语言的选择
|
||||
|
||||
Java 采用链式地址。自 JDK 1.8 以来,当 HashMap 内数组长度达到 64 且链表长度达到 8 时,链表会被转换为红黑树以提升查找性能。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user