auto commit
16
notes/算法.md
|
@ -1195,7 +1195,7 @@ private void keys(Node x, Queue<Key> queue, Key lo, Key hi) {
|
|||
|
||||
<div align="center"> <img src="../pics//ff396233-1bb1-4e74-8bc2-d7c90146f5dd.png" width="250"/> </div><br>
|
||||
|
||||
2-3 查找树引入了 2- 节点和 3- 节点,目的是为了让树更平衡。一颗完美平衡的 2-3 查找树的所有空链接到根节点的距离应该是相同的。
|
||||
2-3 查找树引入了 2- 节点和 3- 节点,目的是为了让树平衡。一颗完美平衡的 2-3 查找树的所有空链接到根节点的距离应该是相同的。
|
||||
|
||||
### 1. 插入操作
|
||||
|
||||
|
@ -1217,8 +1217,6 @@ private void keys(Node x, Queue<Key> queue, Key lo, Key hi) {
|
|||
|
||||
2-3 查找树的查找和插入操作复杂度和插入顺序无关,在最坏的情况下查找和插入操作访问的节点必然不超过 logN 个,含有 10 亿个节点的 2-3 查找树最多只需要访问 30 个节点就能进行任意的查找和插入操作。
|
||||
|
||||
<div align="center"> <img src="../pics//a46cf05d-e665-4937-a939-a3ab783bc8ee.png" width="800"/> </div><br>
|
||||
|
||||
## 红黑二叉查找树
|
||||
|
||||
2-3 查找树需要用到 2- 节点和 3- 节点,红黑树使用红链接来实现 3- 节点。指向一个节点的链接颜色如果为红色,那么这个节点和上层节点表示的是一个 3- 节点,而黑色则是普通链接。
|
||||
|
@ -1232,7 +1230,7 @@ private void keys(Node x, Queue<Key> queue, Key lo, Key hi) {
|
|||
|
||||
画红黑树时可以将红链接画平。
|
||||
|
||||
<div align="center"> <img src="../pics//f47f9729-29ed-4c17-9924-76139342fac7.png" width="800"/> </div><br>
|
||||
<div align="center"> <img src="../pics//3086c248-b552-499e-b101-9cffe5c2773e.png" width="300"/> </div><br>
|
||||
|
||||
```java
|
||||
public class RedBlackBST<Key extends Comparable<Key>, Value> {
|
||||
|
@ -1423,7 +1421,7 @@ public class Transaction{
|
|||
|
||||
拉链法使用链表来存储 hash 值相同的键,从而解决冲突。此时查找需要分两步,首先查找 Key 所在的链表,然后在链表中顺序查找。
|
||||
|
||||
<div align="center"> <img src="../pics//b4252c85-6fb0-4995-9a68-a1a5925fbdb1.png" width="350"/> </div><br>
|
||||
<div align="center"> <img src="../pics//b4252c85-6fb0-4995-9a68-a1a5925fbdb1.png" width="300"/> </div><br>
|
||||
|
||||
对于 N 个键,M 条链表 (N>M),如果哈希函数能够满足均匀性的条件,每条链表的大小趋向于 N/M,因此未命中的查找和插入操作所需要的比较次数为 \~N/M。
|
||||
|
||||
|
@ -1521,12 +1519,12 @@ public void delete(Key key) {
|
|||
|
||||
**(四)调整数组大小**
|
||||
|
||||
线性探测法的成本取决于连续条目的长度,连续条目也叫聚簇。当聚簇很长时,在查找和插入时也需要进行很多次探测。
|
||||
线性探测法的成本取决于连续条目的长度,连续条目也叫聚簇。当聚簇很长时,在查找和插入时也需要进行很多次探测。例如下图中 2\~5 位置就是一个聚簇。
|
||||
|
||||
<div align="center"> <img src="../pics//386cd64f-7a9d-40e6-8c55-22b90ee2d258.png" width="400"/> </div><br>
|
||||
|
||||
α = N/M,把 α 称为利用率。理论证明,当 α 小于 1/2 时探测的预计次数只在 1.5 到 2.5 之间。
|
||||
|
||||
<div align="center"> <img src="../pics//d3352e6a-483a-44f2-930e-28c1d677f9b9.png" width="1000"/> </div><br>
|
||||
|
||||
为了保证散列表的性能,应当调整数组的大小,使得 α 在 [1/4, 1/2] 之间。
|
||||
|
||||
```java
|
||||
|
@ -1550,8 +1548,6 @@ private void resize(int cap) {
|
|||
|
||||
虽然每次重新调整数组都需要重新把每个键值对插入到散列表,但是从摊还分析的角度来看,所需要的代价却是很小的。从下图可以看出,每次数组长度加倍后,累计平均值都会增加 1,这是因为散列表中每个键都需要重新计算散列值。随后平均值会下降。
|
||||
|
||||
<div align="center"> <img src="../pics//d7c6c42d-a4d8-4b85-82fb-c21250bf5ca1.png" width="800"/> </div><br>
|
||||
|
||||
## 应用
|
||||
|
||||
### 1. 各种符号表实现的比较
|
||||
|
|
Before Width: | Height: | Size: 4.0 KiB |
Before Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 9.0 KiB |
Before Width: | Height: | Size: 8.0 KiB |
Before Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 4.0 KiB |
BIN
pics/3086c248-b552-499e-b101-9cffe5c2773e.png
Normal file
After Width: | Height: | Size: 4.0 KiB |
Before Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 7.0 KiB |
Before Width: | Height: | Size: 3.0 KiB |
BIN
pics/386cd64f-7a9d-40e6-8c55-22b90ee2d258.png
Normal file
After Width: | Height: | Size: 4.0 KiB |
Before Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 6.0 KiB |
Before Width: | Height: | Size: 4.0 KiB |
Before Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 87 KiB |
Before Width: | Height: | Size: 7.0 KiB |
Before Width: | Height: | Size: 60 KiB |
Before Width: | Height: | Size: 59 KiB |
Before Width: | Height: | Size: 111 KiB |
Before Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 72 KiB |
Before Width: | Height: | Size: 70 KiB |
Before Width: | Height: | Size: 553 KiB |
Before Width: | Height: | Size: 64 KiB |
Before Width: | Height: | Size: 82 KiB |
Before Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 7.0 KiB |
Before Width: | Height: | Size: 61 KiB |
Before Width: | Height: | Size: 30 KiB |