Skip to content

Commit e9a6cc8

Browse files
committed
[notes][18_hashtable] open address.
1 parent ec1cb44 commit e9a6cc8

File tree

1 file changed

+30
-0
lines changed

1 file changed

+30
-0
lines changed

notes/18_hashtable/readme.md

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,33 @@
2525
## 散列冲突¡
2626

2727
* 散列冲突:`key1 != key2``hash(key1) == hash(key2)`
28+
29+
散列冲突会导致不同键值映射到散列表的同一个位置。为此,我们需要解决散列冲突带来的问题。
30+
31+
### 开放寻址法
32+
33+
如果遇到冲突,那就继续寻找下一个空闲的槽位。
34+
35+
#### 线性探测
36+
37+
插入时,如果遇到冲突,那就依次往下寻找下一个空闲的槽位。(橙色表示已被占用的槽位,黄色表示空闲槽位)
38+
39+
![](https://static001.geekbang.org/resource/image/5c/d5/5c31a3127cbc00f0c63409bbe1fbd0d5.jpg)
40+
41+
查找时,如果目标槽位上不是目标数据,则依次往下寻找;直至遇见目标数据或空槽位。
42+
43+
![](https://static001.geekbang.org/resource/image/91/ff/9126b0d33476777e7371b96e676e90ff.jpg)
44+
45+
删除时,标记为 `deleted`,而不是直接删除。
46+
47+
#### 平方探测(Quadratic probing)
48+
49+
插入时,如果遇到冲突,那就往后寻找下一个空闲的槽位,其步长为 $1^2$, $2^2$, $3^2$, $\ldots$。
50+
51+
查找时,如果目标槽位上不是目标数据,则依次往下寻找,其步长为 $1^2$, $2^2$, $3^2$, $\ldots$;直至遇见目标数据或空槽位。
52+
53+
删除时,标记为 `deleted`,而不是直接删除。
54+
55+
#### 装载因子(load factor)
56+
57+
$\text{load factor} = \frac{size()}{capacity()}$

0 commit comments

Comments
 (0)