You are on page 1of 90

Size Balanced

Tree
中山纪念中学
高二 陈启峰
344368722@QQ.com
总揽全 文
n BST & Rotations : 预备知 识
n Size Balanced Tree : 定义 & 功
能介绍
n Maintain : 核心操作
n Analysis : 时间复杂度分 析
n Advantage : 七大优点
n 探索历程 : 感性与理性 中螺旋前进
Binary Search Tree

 Binary Search Tree (abbr. BST)


是一棵具有以下 性质的二叉 树:
对于 BST 中任 意一个结点 ,
(1) 左子树中的关键 字不大于它 的关键字
;
(2) 右子树中的关键 字不小于它 的关键字
.
Binary Search Tree
 为了方便讨论我 们定义:

 Left [T] : 结点 T 的左儿子

 Right [T] : 结点 T 的右儿子

 S [T] : 以 T 为根的 子树的结点 个数


(大小)
Rotations

2. 为了保持 BST 平衡,我们通常 使用


Rotations 来改变树的形态 。

4. Rotations 分为相 对的两种类 型:


Right-Rotate
Left-Rotate
Rotations
T

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

s[R] ≥ s[A] , s[B]


s[L] ≥ s[C] , s[D]
Size Balanced Tree
Insert 插入
Delete 删除
Find 查找
Rank 排名
Select 找第 K 小
Pred 前趋
Succ 后继
 当我们插入或删 除一个结点 后,SBT
的大小就发生了 改变。

 这种改变有可能 导致性质 (a) 或 (b) 被


破坏。

 这时,我们需要 修复这棵树 。
Maintain

 M aintain (T) 用于修复以 T 为根的


SBT 。

 调用 Maintain (T) 的前提条件是


T 的子树都已经是 SBT 了
Maintain

 由于性质 (a) 和 (b) 是对称的,下


面仅对性质 (a) 被破坏的情况进行分
析:
Maintain
 Case 1:
s[Left[Left[T]]>s[Right[T]]
T

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

 通常我们可以确 保性质 (a) 或 (b)


已经被满足了。

 为了提高效率我 们可以增加 一个布尔


型参数 flag 来去除 无意义的检 查。
Maintain
 If flag =fals e then
 If s[left [left [t ]]>s [r ight [t ]] then
// case 1
 Ri ght -R ot at e( t)
// case 1
 El se if s[r ight[ left [t ]]>s[ right [t ]] then
// case 2
 Left -Ro tat e(left [t ])
// case 2
 Ri ght -Rot at e(t )
// case 2
 Else exi t
// nee dn’t rep ai r
 Else i f s [r ight [r ight [t] ]> s[le ft [t ]] then //cas e
1’
 Left -Rot at e(t )
Maintain

 Mai nt ai n( left [t ],fa lse) // repa ir t he left


subt ree
 Mai nt ai n( right [t ],t rue ) / /r epai r the right
subt ree
 Mai nt ai n( t, fal se) //r epai r the
who le tree
 Mai nt ai n( t, tr ue ) // re pai r the
who le tree
Analysis
 Anal ysis Of He ight
 F[H] —— 高度为 H 的 SBT 最少的 结点
个数。

F[H]= Fibon acci[ H+2]- 1


H 13 17 21 25 29

F[H] 986 6764 46367 317810 2178308


Analysis
 Anal ysis Of He ight
 定理:

N 个结点的 SBT 的最坏深度 为


最大的 H 且满足 F[H] ≤ N 。
因此
Max_Height[N] ≤1.44log2(N+1.5)-1.33
Analysis
 Anal ysis Of Ma intai n

 设 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

 SD 减少了 s[B] -s[R] +1


( 正整数 ) E F C D
Analysis
 Anal ysis Of Ma intai n

结论( 2 )
SD 总保持 在 O(nlogn)

 综合结论( 1 )( 2 )我们得到

Maintain 的摊平 时间复杂度 = O( 1 )


Analysis
 Anal ysis Of Op erati ons
Insert O(logn)
Delete O(logn)
Find O(logn)
Rank O(logn)
Select O(logn)
Pred O(logn)
Succ O(logn)
Advantage
 七大优点
2. 速度快
Advantage
Insert 2,000,000 nodes with random values

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

旋转次 157 140 399


400 万 2515 万 ?
数 万 万 万
Advantage
 插入 2,000,000 个关 键字有 序的 结点

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

旋转次 200 200 200


200 万 0 ?
数 万 万 万
Advantage
 七大优点
 速度快
 性能高
 调试易
Advantage
 七大优点
 速度快
 性能高
 调试易
 代码短
Advantage
 七大优点
 速度快
 性能高
 调试易
 代码短
 空间少
Advantage
 七大优点
 速度快
 性能高
 调试易
 代码短
 空间少
 功能强
Advantage
 七大优点
 速度快
 性能高
 调试易
 代码短
 空间少
 功能强
 应用广
Advantage
在信息学竞赛中的应用

 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)

能降低平均深度。可能 这 是
解 会退化成 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)

能降低平均深度。可能 这 是
添加 解 会退化成 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

 为了方便,我增加了 Delete 的功能:

 如果没有要删除的点就删除最后搜索到的
结点。
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

 其实结合 SBT-Insert 地使用 Simple-


Delete 时间复杂度 仅仅是 O(log
n*) 。其中 n* 是总的 插入次数。

 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

You might also like