diff --git a/notes/算法.md b/notes/算法.md index 85480c53..03093066 100644 --- a/notes/算法.md +++ b/notes/算法.md @@ -884,11 +884,11 @@ public static Comparable select(Comparable[] a, int k) { ### 1. 无序符号表 -

+

### 2. 有序符号表 -

+

有序指的是支持 min() max() 等根据键的大小关系来实现的操作。 @@ -1053,9 +1053,6 @@ private Node put(Node x, Key key, Value val) {

- -复杂度:BST 查找和插入操作的平均时间复杂度为对数级别。 - ### 4. floor() floor(key):小于等于键的最大键 @@ -1187,27 +1184,37 @@ private void keys(Node x, Queue queue, Key lo, Key hi) { ## 2-3 查找树 -

+

-一颗完美平衡的 2-3 查找树的所有空链接到根节点的距离应该是相同的。 +2-3 查找树引入了 2- 节点和 3- 节点,目的是为了让树更平衡。一颗完美平衡的 2-3 查找树的所有空链接到根节点的距离应该是相同的。 ### 1. 插入操作 -当插入之后产生一个临时 4- 节点时,需要将 4- 节点分裂成 3 个 2- 节点,并将中间的 2- 节点移到上层节点中。如果上移操作继续产生临时 4- 节点则一直进行分裂上移,直到不存在临时 4- 节点。 +插入操作和 BST 的插入操作有很大区别,BST 的插入操作是先进行一次未命中的查找,然后再将节点插入到对应的空链接上。但是 2-3 查找树如果也这么做的话,那么就会破坏了平衡性。它是将新节点插入到叶子节点上。 -

+根据叶子节点的类型不同,有不同的处理方式。 + +插入到 2- 节点上,那么直接将新节点和原来的节点组成 3- 节点即可。 + +

+ +如果是插入到 3- 节点上,就会产生一个临时 4- 节点时,需要将 4- 节点分裂成 3 个 2- 节点,并将中间的 2- 节点移到上层节点中。如果上移操作继续产生临时 4- 节点则一直进行分裂上移,直到不存在临时 4- 节点。 + +

### 2. 性质 2-3 查找树插入操作的变换都是局部的,除了相关的节点和链接之外不必修改或者检查树的其它部分,而这些局部变换不会影响树的全局有序性和平衡性。 -2-3 查找树的查找和插入操作复杂度和插入顺序 **无关** ,在最坏的情况下查找和插入操作访问的节点必然不超过 logN 个,含有 10 亿个节点的 2-3 查找树最多只需要访问 30 个节点就能进行任意的查找和插入操作。 +2-3 查找树的查找和插入操作复杂度和插入顺序无关,在最坏的情况下查找和插入操作访问的节点必然不超过 logN 个,含有 10 亿个节点的 2-3 查找树最多只需要访问 30 个节点就能进行任意的查找和插入操作。 + +

## 红黑二叉查找树 2-3 查找树需要用到 2- 节点和 3- 节点,红黑树使用红链接来实现 3- 节点。指向一个节点的链接颜色如果为红色,那么这个节点和上层节点表示的是一个 3- 节点,而黑色则是普通链接。 -

+

红黑树具有以下性质: diff --git a/pics/299a8cd3-7cfa-45d0-8821-4aa577de4692.png b/pics/299a8cd3-7cfa-45d0-8821-4aa577de4692.png new file mode 100644 index 00000000..23fe5d4a Binary files /dev/null and b/pics/299a8cd3-7cfa-45d0-8821-4aa577de4692.png differ diff --git a/pics/64b70b59-5bae-4dd2-addd-7f687ea5b64b.png b/pics/64b70b59-5bae-4dd2-addd-7f687ea5b64b.png new file mode 100644 index 00000000..f21a3bc5 Binary files /dev/null and b/pics/64b70b59-5bae-4dd2-addd-7f687ea5b64b.png differ diff --git a/pics/8a116e69-3d57-4987-a215-0197dd044a14.png b/pics/8a116e69-3d57-4987-a215-0197dd044a14.png new file mode 100644 index 00000000..636459da Binary files /dev/null and b/pics/8a116e69-3d57-4987-a215-0197dd044a14.png differ diff --git a/pics/a259182b-91b7-4b63-98c9-9d9cc6e199d4.png b/pics/a259182b-91b7-4b63-98c9-9d9cc6e199d4.png new file mode 100644 index 00000000..42be8f02 Binary files /dev/null and b/pics/a259182b-91b7-4b63-98c9-9d9cc6e199d4.png differ diff --git a/pics/a46cf05d-e665-4937-a939-a3ab783bc8ee.png b/pics/a46cf05d-e665-4937-a939-a3ab783bc8ee.png new file mode 100644 index 00000000..f8a0bb48 Binary files /dev/null and b/pics/a46cf05d-e665-4937-a939-a3ab783bc8ee.png differ diff --git a/pics/fd20f4f9-e5d8-43cf-bf4f-2057c18d01fb.png b/pics/fd20f4f9-e5d8-43cf-bf4f-2057c18d01fb.png new file mode 100644 index 00000000..1bb5f234 Binary files /dev/null and b/pics/fd20f4f9-e5d8-43cf-bf4f-2057c18d01fb.png differ