auto commit

This commit is contained in:
CyC2018 2018-03-24 17:37:28 +08:00
parent b2ff1fd097
commit e0f94a02f3
7 changed files with 18 additions and 11 deletions

View File

@ -884,11 +884,11 @@ public static Comparable select(Comparable[] a, int k) {
### 1. 无序符号表 ### 1. 无序符号表
<div align="center"> <img src="../pics//aaa40d0a-0aff-4161-adde-8d7bf56dc4b9.jpg"/> </div><br> <div align="center"> <img src="../pics//8a116e69-3d57-4987-a215-0197dd044a14.png" width="800"/> </div><br>
### 2. 有序符号表 ### 2. 有序符号表
<div align="center"> <img src="../pics//1984a822-da4e-4461-b826-55b798e2d419.jpg"/> </div><br> <div align="center"> <img src="../pics//299a8cd3-7cfa-45d0-8821-4aa577de4692.png" width="800"/> </div><br>
有序指的是支持 min() max() 等根据键的大小关系来实现的操作。 有序指的是支持 min() max() 等根据键的大小关系来实现的操作。
@ -1053,9 +1053,6 @@ private Node put(Node x, Key key, Value val) {
<div align="center"> <img src="../pics//0dd97d9e-7a38-460e-a2ac-3e4511145240.png" width="300"/> </div><br> <div align="center"> <img src="../pics//0dd97d9e-7a38-460e-a2ac-3e4511145240.png" width="300"/> </div><br>
复杂度BST 查找和插入操作的平均时间复杂度为对数级别。
### 4. floor() ### 4. floor()
floor(key):小于等于键的最大键 floor(key):小于等于键的最大键
@ -1187,27 +1184,37 @@ private void keys(Node x, Queue<Key> queue, Key lo, Key hi) {
## 2-3 查找树 ## 2-3 查找树
<div align="center"> <img src="../pics//2548f2ec-7b00-4ec7-b286-20fc3022e084.jpg"/> </div><br> <div align="center"> <img src="../pics//fd20f4f9-e5d8-43cf-bf4f-2057c18d01fb.png" width="300"/> </div><br>
一颗完美平衡的 2-3 查找树的所有空链接到根节点的距离应该是相同的。 2-3 查找树引入了 2- 节点和 3- 节点,目的是为了让树更平衡。一颗完美平衡的 2-3 查找树的所有空链接到根节点的距离应该是相同的。
### 1. 插入操作 ### 1. 插入操作
当插入之后产生一个临时 4- 节点时,需要将 4- 节点分裂成 3 个 2- 节点,并将中间的 2- 节点移到上层节点中。如果上移操作继续产生临时 4- 节点则一直进行分裂上移,直到不存在临时 4- 节点 插入操作和 BST 的插入操作有很大区别BST 的插入操作是先进行一次未命中的查找,然后再将节点插入到对应的空链接上。但是 2-3 查找树如果也这么做的话,那么就会破坏了平衡性。它是将新节点插入到叶子节点上
<div align="center"> <img src="../pics//912174d8-0786-4222-b7ef-a611d36e5db9.jpg"/> </div><br> 根据叶子节点的类型不同,有不同的处理方式。
插入到 2- 节点上,那么直接将新节点和原来的节点组成 3- 节点即可。
<div align="center"> <img src="../pics//64b70b59-5bae-4dd2-addd-7f687ea5b64b.png" width="400"/> </div><br>
如果是插入到 3- 节点上,就会产生一个临时 4- 节点时,需要将 4- 节点分裂成 3 个 2- 节点,并将中间的 2- 节点移到上层节点中。如果上移操作继续产生临时 4- 节点则一直进行分裂上移,直到不存在临时 4- 节点。
<div align="center"> <img src="../pics//a259182b-91b7-4b63-98c9-9d9cc6e199d4.png" width="400"/> </div><br>
### 2. 性质 ### 2. 性质
2-3 查找树插入操作的变换都是局部的,除了相关的节点和链接之外不必修改或者检查树的其它部分,而这些局部变换不会影响树的全局有序性和平衡性。 2-3 查找树插入操作的变换都是局部的,除了相关的节点和链接之外不必修改或者检查树的其它部分,而这些局部变换不会影响树的全局有序性和平衡性。
2-3 查找树的查找和插入操作复杂度和插入顺序 **无关** ,在最坏的情况下查找和插入操作访问的节点必然不超过 logN 个,含有 10 亿个节点的 2-3 查找树最多只需要访问 30 个节点就能进行任意的查找和插入操作。 2-3 查找树的查找和插入操作复杂度和插入顺序无关,在最坏的情况下查找和插入操作访问的节点必然不超过 logN 个,含有 10 亿个节点的 2-3 查找树最多只需要访问 30 个节点就能进行任意的查找和插入操作。
<div align="center"> <img src="../pics//a46cf05d-e665-4937-a939-a3ab783bc8ee.png"/> </div><br>
## 红黑二叉查找树 ## 红黑二叉查找树
2-3 查找树需要用到 2- 节点和 3- 节点,红黑树使用红链接来实现 3- 节点。指向一个节点的链接颜色如果为红色,那么这个节点和上层节点表示的是一个 3- 节点,而黑色则是普通链接。 2-3 查找树需要用到 2- 节点和 3- 节点,红黑树使用红链接来实现 3- 节点。指向一个节点的链接颜色如果为红色,那么这个节点和上层节点表示的是一个 3- 节点,而黑色则是普通链接。
<div align="center"> <img src="../pics//7080a928-06ba-4e10-9792-b8dd190dc8e2.jpg"/> </div><br> <div align="center"> <img src="../pics//a46cf05d-e665-4937-a939-a3ab783bc8ee.png" width="800"/> </div><br>
红黑树具有以下性质: 红黑树具有以下性质:

Binary file not shown.

After

Width:  |  Height:  |  Size: 309 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 162 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 239 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB