Professional Documents
Culture Documents
10 陈启峰《Size Balanced Tree》
10 陈启峰《Size Balanced Tree》
Tree
中山纪念中学
高二 陈启峰
344368722@QQ.com
总揽全 文
n BST & Rotations : 预备知 识
n Size Balanced Tree : 定义 & 功
能介绍
n Maintain : 核心操作
n Analysis : 时间复杂度分 析
n Advantage : 七大优点
n 探索历程 : 感性与理性 中螺旋前进
Binary Search Tree
L R
A B
表示 结 点 Right-Rotate 表示 BS T
Rotations
T
L R
A B
Right-Rotate
Rotations
L T
A B R
Right-Rotate
Rotations
L
A T
B R
Right-Rotate
Size Balanced Tree
Size Balanced Tree (abbr. SBT)
是一种通过大小 来保持平衡 的 BST 。它
总是满足:
对于 SBT 的每一个结 点 t,
性质 (a)
s[right[t]]≥s[left[left[t]]],
s[right[left[t]]]
性质 (b)
s[left[t]]≥s[right[right[t]]],
Size Balanced Tree
T
L R
A B C D
这时,我们需要 修复这棵树 。
Maintain
L R
S[A]>S[R]
A B C D
Maintain
Case 1:
s[Left[Left[T]]>s[Right[T]]
T
2. Right-Rotate (T)
L R
A B C D
Maintain
Case 1:
s[Left[Left[T]]>s[Right[T]]
T
2. Right-Rotate (T)
L R
A B C D
Maintain
Case 1:
s[Left[Left[T]]>s[Right[T]]
2. Right-Rotate (T)
L T
A B R
C D
Maintain
Case 1:
s[Left[Left[T]]>s[Right[T]]
L
2. Right-Rotate (T)
A T
B R
C D
Maintain
Case 1:
s[Left[Left[T]]>s[Right[T]]
L
Right-Rotate (T)
Maintain (T)
A T
SBT
B R
C D
Maintain
Case 1:
s[Left[Left[T]]>s[Right[T]]
L
Right-Rotate (T) SBT
Maintain (T)
A SBT
Maintain (L)
Maintain
Case 2:
s[right[left[t]]>s[right[t]]
T
L R
s[B]>s[R]
A B C D
E F
Maintain
Case 2:
s[right[left[t]]>s[right[t]]
T
2. Left-Rotate (L)
L R
A B C D
E F
Maintain
Case 2:
s[right[left[t]]>s[right[t]]
T
2. Left-Rotate (L)
L R
A B C D
E F
Maintain
Case 2:
s[right[left[t]]>s[right[t]]
T
2. Left-Rotate (L)
L B C D
A E F
Maintain
Case 2:
s[right[left[t]]>s[right[t]]
T
2. Left-Rotate (L)
B R
L F C D
A E
Maintain
Case 2:
s[right[left[t]]>s[right[t]]
T
Left-Rotate (L)
Right-Rotate (T)
B R
L F C D
A E
Maintain
Case 2:
s[right[left[t]]>s[right[t]]
T
Left-Rotate (L)
Right-Rotate (T)
B R
L F C D
A E
Maintain
Case 2:
s[right[left[t]]>s[right[t]]
Left-Rotate (L)
Right-Rotate (T) T
B
L F R
A E C D
Maintain
Case 2:
s[right[left[t]]>s[right[t]]
B
Left-Rotate (L)
Right-Rotate (T) T
L
A E F R
C D
Maintain
Case 2:
s[right[left[t]]>s[right[t]]
B
Left-Rotate (L)
Right-Rotate (T) T
L
Maintain (L) & SBT SBT
Maintain (T)
A E F R
C D
Maintain
Case 2:
s[right[left[t]]>s[right[t]]
B
2. Left-Rotate (L) SBT
3. Right-Rotate (T)
4. Maintain (L) & SBT SBT
Maintain (T)
6. Maintain (B)
Maintain
设 SD 为所有结点 的深度之和
结论 (1 )
在 Main tain 的旋转后 SD 总是递减
Analysis
Anal ysis Of Ma intai n
Case 1 : s[A]>s[R] T
L
A L T R
A B C R D
SD 减少了 s[A ]-s[R ]
( 正整数 )
C D
Analysis
Anal ysis Of Ma intai n
Case 2 : s[B]>s[R] T
B
T
L L R
A A E B
F C R D
结论( 2 )
SD 总保持 在 O(nlogn)
综合结论( 1 )( 2 )我们得到
16
环 境 : 5 12M b
14 Penti um M 1 .6G
12
10
second
8 Randomized
6 Treap BST 13.61
11.36
4 AVL 8.34
SBT 7.13
2
0
Advantage
Perform 2,000,000 operations of 66% insertion
and 33% deletion with random values
12
环 境 : 5 12M b
10 Penti um M 1 .6G
8
second
6 Randomzied
Treap BST 10.47
4 AVL 7.42 8.86
SBT 5.59
2
0
Advantage
Perform 2,000,000 operations of 20% insertion
7
,10% deletion and 60% query with random values
7
环 境 : 5 12M b
6 Penti um M 1 .6G
5
second
4
Randomized
3 Treap
BST 6.21
5.67
2 AVL 4.21
SBT 3.39
1
0
Advantage
七大优点
速度快
性能高
Advantage
插入 2,000,000 个关 键字随 机的 结点
Random Perfec
类型 SBT AVL Treap Splay
ized BST t BST
平均深
19.24 19.33 26.51 25.53 37.20 18.95
度
高度 24 24 50 53 78 20
Random Perfec
类型 SBT AVL Treap Splay
ized BST t BST
平均深
18.95 18.95 25.7 26.29 999999.5 18.95
度
高度 20 20 51 53 1999999 20
Happy Birthday(NOI2006)
郁闷的出纳员 (NOI2004)
营业额统计 (HNOI2002)
宠物收养所 (HNOI2004)
……
探索历 程
感性与理性中螺旋前进
Iff s[le ft[t ]]>s[r ight[t ]]
效果不好,不一
th en ri gh t_r ota te (t )
定
简 单 能降低平均深度
Iff s[le ft[t ]]>s[r ight[t ]]
th en ri gh t_r ota te (t )
简 单
If 效果不好,不一
s[le ft[l eft [t]]] >s[r igh 定
t[t ]]
能降低平均深度
th en right _rot ate ( t)
能降低平均深度。可能 这 是
解
Iff s[le ft[t ]]>s[r ight[t ]]
效果不好,不一
th en ri gh t_r ota te (t )
定
简 单
能降低平均深度
If 依赖数据.
s[le ft[l eft [t]]] >s[r igh 对于人
t[t ]]
字形数据 ,BS
th en right _rot ate ( t)
T
能降低平均深度。可能 这 是
解 会退化成 O(N)
If 效果不好,不一
s[le ft[l eft [t]]] >s[r igh 定
t[t ]]
能降低平均深度
th en right _rot ate ( t)
能降低平均深度。 这应该 是
添加 解
依赖数据.对于
If决 有序和 随 机 数 据的很好方 人
s[r igh t[l eft法[t]] ]>s[r ig
ht [t]] 字形数据,BS
th en lef t_r ota te (le ft[t ]) T
right _rot ate (t) 会退化成 O(N)
If 依赖数据.对于
s[le ft[l eft [t]]] >s[r igh 人
t[t ]]
字形数据,BS
th en right _rot ate ( t)
T
能降低平均深度。可能 这 是
添加 解 会退化成 O(N)
时间复杂
深度
If决 有序和 随 机 数 据的最好方 度
s[r igh t[l eft法[t]] ]>s[r ig
ht [t]] 不容易分
th en lef t_r ota te (le ft[t ]) 析
right _rot ate (t)
添加
依赖数据.对于
If 人
s[r igh t[l eft [t]] ]>s[r ig
ht [t]] 字形数据,BS
th en lef t_r ota te (le ft[t ]) T
right _rot ate (t) 会退化成 O(N)
深度
探索历 程
在此感谢
我的英语老师 Fiona
复旦大学的姚子 渊
香港大学的麦原 和 Professor Golin
附
想获得更详尽的内容,请参考我的论文。
Insertion
Si mpl e-In ser t (t, v)
2. If t=0 the n
3. t←NEW -NOD E(v )
4. El se
5. s[t] ←s[t ]+1
6. If v <ke y[t ] then
7. Si mp le -Ins er t( le ft[t ],v)
8. El se
9. Si mp le -Ins er t( ri gh t[t], v)
10. Main tain (t ,v ≥key[t])
Deletion
如果没有要删除的点就删除最后搜索到的
结点。
Deletion
If s[ t]≤ 2 the n
reco rd←k ey [t ]
t←l eft [t ]+ right [t]
exi t
s[ t] ← s[t ] - 1
If v= key [t] then
Delet e(l eft [t ],v [t ]+ 1)
Key [t ] ←reco rd
Main tain (t ,t rue)
Else if v<ke y[t ] then
Delet e(le ft[ t],v)
Else
Delet e(r ight [t] ,v)
Main tain (t ,v<k ey [t] )
Deletion
Simple-Delete 不仅更简单而且 常数
非常小。
f
T
L R
A B C D
T
L R
A B C D
E F
T
L R
A B C D
T
L R
A B C D
L T
A B R
C D
L
A T
B R
C D
T
L R
A B C D
E F
T
L R
A B C D
E F
T
L R
A B C D
E F
T
L B C D
A E F
T
B R
L F C D
A E
T
B R
L F C D
A E
T
B R
L F C D
A E
T
B
L F R
A E C D
B
T
L
A E F R
C D
B
T
L
A E F R
C D
插
入
人
字
形
数
据
后
退
化
的
SB T V2. 0
T
L R
A B
T
L R
A B
L
A T
B R