标签:最好 底部 现实生活 规律 构造 导致 table lock 时间复杂度
2-3 Tree
2-3树是一种二叉查找树的推广,来提供更好的执行效果
结点
结点类型 |
键数目 |
孩子数目 |
2结点 |
1 |
2 |
3结点 |
2 |
3 |
graph TD
1(B)---|小于B|2(A)
1---|大于B|3(C)
graph TD
1(B D)---|小于B|2(A)
1---|介于B和D之间|4(C)
1---|大于B|3(E)
RULE
完美平衡 |
每条从根节点到空链接的路径有相同的长度 |
对称顺序 |
中序遍历得到升序序列 |
检索
graph TD
1(M)---|<1> H小于M|2(E J)
1---3(R)
2---4(A C)
2---|<2> H介于E和J之间 OK|5(H)
2---0(L)
3---8(P)
3---9(S X)
插入
插入键落在底部2结点上
graph TD
1(M)---|<1> K小于M|2(E J)
1---3(R)
2---4(A C)
2---5(H)
2---|<2> K大于J|0(L)
3---8(P)
3---9(S X)
- 将2结点变为3结点
graph TD
1(M)---2(E J)
1---3(R)
2---4(A C)
2---5(H)
2---0(K L)
3---8(P)
3---9(S X)
插入键落在底部3结点上
graph TD
1(M)---2(E J)
1---|<1> Z大于M|3(R)
2---4(A C)
2---5(H)
2---0(L)
3---8(P)
3---|<2> Z大于R|9(S X)
- 将3结点变为4结点(按规律来说就是有三个键,四个儿子的结点)
graph TD
1(M)---2(E J)
1---3(R)
2---4(A C)
2---5(H)
2---0(K L)
3---8(P)
3---9(S X Z)
- 将4结点分解为两个2结点,同时将中间的键传递给父结点
graph TD
1(M)---2(E J)
1---3(R X)
2---4(A C)
2---5(H)
2---0(K L)
3---8(P)
3---9(S)
3---10(Z)
- 检查父节点是否符合2或3结点,如果父结点变为4结点则对父结点执行第三部操作,一直往上检查直到树中不存在4结点
构造2-3树
- 空树
- 插入第一个键时构造一个2结点放入其中
- 插入第二个键时放入之前的2结点
- 插入后续的键时执行插入操作
案例
空树
graph TD
1(EMPTY)
插入S(构建一个2结点)
graph TD
1(S)
插入E(将2结点换为3结点)
graph TD
1(E S)
插入A(将3结点换为4结点)
graph TD
1(A E S)
(将4结点换为两个二节点,同时将中间的键传递给父结点)
graph TD
1(E)---2(A)
1---3(S)
插入D
graph TD
1(E)---2(A D)
1---3(S)
插入C
graph TD
1(E)---2(A C D)
1---3(S)
graph TD
1(C E)---2(A)
1---4(D)
1---3(S)
插入U
graph TD
1(C E)---2(A)
1---4(D)
1---3(S U)
插入T
graph TD
1(C E)---2(A)
1---4(D)
1---3(S T U)
graph TD
1(C E T)---2(A)
1---4(D)
1---3(S)
1---5(U)
graph TD
8(E)---1
8---7(T)
1(C)---2(A)
1---4(D)
7---3(S)
7---5(U)
分析
2-3树相较于二叉查找树有很高的效率提升,这是因为二叉查找树对于树的平衡度没有调整,而现实生活中的数据往往是有规律的而非随机的,二叉查找树得到的往往是一颗偏斜的树,导致效率低下
情形 |
描述 |
时间复杂度 |
最坏情形 |
全是2结点 |
lgN |
最好情形 |
全是2结点 |
lg3N |
树高度 |
存储结点 |
12~20 |
百万级别 |
18~30 |
十亿级别 |
2-3树
标签:最好 底部 现实生活 规律 构造 导致 table lock 时间复杂度
原文地址:https://www.cnblogs.com/redo19990701/p/11291722.html