90
Size Balanced Size Balanced Tree Tree 中中中中中中 中中中中中中 中中 中中中 中中 中中中 [email protected] [email protected]

10 陈启峰《Size Balanced Tree》

  • Upload
    yizer

  • View
    325

  • Download
    0

Embed Size (px)

DESCRIPTION

陈启峰的平衡树论文

Citation preview

Page 1: 10 陈启峰《Size Balanced Tree》

Size Balanced Size Balanced TreeTree

中山纪念中学中山纪念中学高二 陈启峰高二 陈启峰

[email protected]@QQ.com

Page 2: 10 陈启峰《Size Balanced Tree》

总揽全文总揽全文

1.1. BST & Rotations : BST & Rotations : 预备知识 预备知识

2.2. Size Balanced Tree : Size Balanced Tree : 定义 定义 & & 功能介绍功能介绍

3.3. Maintain : Maintain : 核心操作核心操作

4.4. Analysis : Analysis : 时间复杂度分析时间复杂度分析

5.5. Advantage : Advantage : 七大优点七大优点

6.6. 探索历程 探索历程 : : 感性与理性中螺旋前进感性与理性中螺旋前进

Page 3: 10 陈启峰《Size Balanced Tree》

Binary Search TreeBinary Search Tree

Binary Search Tree (abbr. BST) Binary Search Tree (abbr. BST) 是一是一棵具有以下性质的二叉树:棵具有以下性质的二叉树:

对于对于 BSTBST 中任意一个结点, 中任意一个结点, (1)(1) 左子树中的关键字不大于它的关键字左子树中的关键字不大于它的关键字 ;;(2)(2) 右子树中的关键字不小于它的关键字右子树中的关键字不小于它的关键字 ..

Page 4: 10 陈启峰《Size Balanced Tree》

Binary Search TreeBinary Search Tree

为了方便讨论我们定义:为了方便讨论我们定义:

1.1. Left [T]Left [T] : : 结点 结点 T T 的左儿子的左儿子

2.2. Right [T]Right [T] : : 结点 结点 T T 的右儿子的右儿子

3.3. S [T]S [T] : : 以以 TT 为根的子树的结点个数(大为根的子树的结点个数(大小)小)

Page 5: 10 陈启峰《Size Balanced Tree》

RotationsRotations

1.1. 为了保持为了保持 BSTBST 平衡,我们通常使用平衡,我们通常使用 RotaRotations tions 来改变树的形态。来改变树的形态。

2.2. RotationsRotations 分为相对的两种类型:分为相对的两种类型: Right-RotateRight-Rotate Left-RotateLeft-Rotate

Page 6: 10 陈启峰《Size Balanced Tree》

Right-RotateRight-Rotate

TT

LL

AA BB

RotationsRotations

表示结点表示结点 表示表示 BSTBST

RR

Page 7: 10 陈启峰《Size Balanced Tree》

Right-RotateRight-Rotate

TT

LL

AA BB

RotationsRotations

RR

Page 8: 10 陈启峰《Size Balanced Tree》

TTLL

AA BB

RotationsRotations

Right-RotateRight-Rotate

RR

Page 9: 10 陈启峰《Size Balanced Tree》

Right-RotateRight-Rotate

TT

LL

AA

BB

RotationsRotations

RR

Page 10: 10 陈启峰《Size Balanced Tree》

Size Balanced TreeSize Balanced Tree

Size Balanced Tree (abbr. SBT) Size Balanced Tree (abbr. SBT) 是一种是一种通过大小来保持平衡的通过大小来保持平衡的 BSTBST 。它总是满足:。它总是满足:

对于对于 SBTSBT 的每一个结点 的每一个结点 t,t, 性质性质 (a)(a)s[right[t]]≥s[left[left[t]]], s[right[left[t]]]s[right[t]]≥s[left[left[t]]], s[right[left[t]]]

性质性质 (b)(b)s[left[t]]≥s[right[right[t]]], s[left[rights[left[t]]≥s[right[right[t]]], s[left[right

[t]]][t]]]

i.e.i.e. 每棵子树的大小不小于其兄弟的子树大小每棵子树的大小不小于其兄弟的子树大小

Page 11: 10 陈启峰《Size Balanced Tree》

Size Balanced TreeSize Balanced Tree

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

s[L] ≥ s[C] , s[D]s[L] ≥ s[C] , s[D]

TT

LL RR

AA BB DDCC

Page 12: 10 陈启峰《Size Balanced Tree》

Size Balanced TreeSize Balanced Tree

InsertInsert 插入插入

DeleteDelete 删除删除

FindFind 查找查找

RankRank 排名排名

SelectSelect 找第找第 KK 小小

PredPred 前趋前趋

SuccSucc 后继后继

Page 13: 10 陈启峰《Size Balanced Tree》

当我们插入或删除一个结点后,SBT的当我们插入或删除一个结点后,SBT的大小就发生了改变。大小就发生了改变。

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

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

Page 14: 10 陈启峰《Size Balanced Tree》

MaintainMaintain

MM aintain (T) aintain (T) 用于修复以 用于修复以 T T 为根的 为根的 SBT SBT 。。

调用 调用 Maintain (T) Maintain (T) 的前提条件是的前提条件是 TT 的子树都已经是 的子树都已经是 SBT SBT 了了

Page 15: 10 陈启峰《Size Balanced Tree》

MaintainMaintain

由于性质 由于性质 (a) (a) 和 和 (b) (b) 是对称的,下面仅是对称的,下面仅对性质 对性质 (a) (a) 被破坏的情况进行分析:被破坏的情况进行分析:

Page 16: 10 陈启峰《Size Balanced Tree》

MaintainMaintain

Case 1: s[Left[Left[T]]>s[Right[T]] Case 1: s[Left[Left[T]]>s[Right[T]]

S[A]>S[R]S[A]>S[R]

TT

LL RR

AA BB DDCC

Page 17: 10 陈启峰《Size Balanced Tree》

MaintainMaintain

Case 1: s[Left[Left[T]]>s[Right[T]] Case 1: s[Left[Left[T]]>s[Right[T]] 1.1. Right-Rotate (T)Right-Rotate (T) TT

LL RR

AA BB DDCC

Page 18: 10 陈启峰《Size Balanced Tree》

MaintainMaintain

Case 1: s[Left[Left[T]]>s[Right[T]] Case 1: s[Left[Left[T]]>s[Right[T]] 1.1. Right-Rotate (T)Right-Rotate (T) TT

LL RR

AA BB DDCC

Page 19: 10 陈启峰《Size Balanced Tree》

MaintainMaintain

Case 1: s[Left[Left[T]]>s[Right[T]] Case 1: s[Left[Left[T]]>s[Right[T]] 1.1. Right-Rotate (T)Right-Rotate (T)

TTLL

RRAA BB

DDCC

Page 20: 10 陈启峰《Size Balanced Tree》

MaintainMaintain

Case 1: s[Left[Left[T]]>s[Right[T]] Case 1: s[Left[Left[T]]>s[Right[T]] 1.1. Right-Rotate (T)Right-Rotate (T)

TT

LL

RR

AA

BB

DDCC

Page 21: 10 陈启峰《Size Balanced Tree》

MaintainMaintain

Case 1: s[Left[Left[T]]>s[Right[T]] Case 1: s[Left[Left[T]]>s[Right[T]] 1.1. Right-Rotate (T)Right-Rotate (T)2.2. Maintain (T)Maintain (T)

TT

LL

RR

AA

BB

DDCC

SBTSBT

Page 22: 10 陈启峰《Size Balanced Tree》

MaintainMaintain

Case 1: s[Left[Left[T]]>s[Right[T]] Case 1: s[Left[Left[T]]>s[Right[T]] 1.1. Right-Rotate (T)Right-Rotate (T)2.2. Maintain (T)Maintain (T)3.3. Maintain (L)Maintain (L)

LL

AA SBTSBT

SBTSBT

Page 23: 10 陈启峰《Size Balanced Tree》

MaintainMaintain

Case 2: s[right[left[t]]>s[right[t]] Case 2: s[right[left[t]]>s[right[t]]

s[B]>s[R]s[B]>s[R]

TT

LL RR

AA DDCCBB

EE FF

Page 24: 10 陈启峰《Size Balanced Tree》

MaintainMaintain

Case 2: s[right[left[t]]>s[right[t]] Case 2: s[right[left[t]]>s[right[t]] 1.1. Left-Rotate (L)Left-Rotate (L) TT

LL RR

AA DDCCBB

EE FF

Page 25: 10 陈启峰《Size Balanced Tree》

MaintainMaintain

Case 2: s[right[left[t]]>s[right[t]] Case 2: s[right[left[t]]>s[right[t]] 1.1. Left-Rotate (L)Left-Rotate (L) TT

LL RR

AA DDCCBB

EE FF

Page 26: 10 陈启峰《Size Balanced Tree》

MaintainMaintain

Case 2: s[right[left[t]]>s[right[t]] Case 2: s[right[left[t]]>s[right[t]] 1.1. Left-Rotate (L)Left-Rotate (L) TT

LL

RR

AA

DDCCBB

EE FF

Page 27: 10 陈启峰《Size Balanced Tree》

MaintainMaintain

Case 2: s[right[left[t]]>s[right[t]] Case 2: s[right[left[t]]>s[right[t]] 1.1. Left-Rotate (L)Left-Rotate (L) TT

LL

RR

AA

DDCC

BB

EE

FF

Page 28: 10 陈启峰《Size Balanced Tree》

MaintainMaintain

Case 2: s[right[left[t]]>s[right[t]] Case 2: s[right[left[t]]>s[right[t]] 1.1. Left-Rotate (L)Left-Rotate (L)2.2. Right-Rotate (T)Right-Rotate (T)

TT

LL

RR

AA

DDCC

BB

EE

FF

Page 29: 10 陈启峰《Size Balanced Tree》

MaintainMaintain

Case 2: s[right[left[t]]>s[right[t]] Case 2: s[right[left[t]]>s[right[t]] 1.1. Left-Rotate (L)Left-Rotate (L)2.2. Right-Rotate (T)Right-Rotate (T)

TT

LL

RR

AA

DDCC

BB

EE

FF

Page 30: 10 陈启峰《Size Balanced Tree》

MaintainMaintain

Case 2: s[right[left[t]]>s[right[t]] Case 2: s[right[left[t]]>s[right[t]] 1.1. Left-Rotate (L)Left-Rotate (L)2.2. Right-Rotate (T)Right-Rotate (T)

TT

LL RR

AA DDCC

BB

EE

FF

Page 31: 10 陈启峰《Size Balanced Tree》

MaintainMaintain

Case 2: s[right[left[t]]>s[right[t]] Case 2: s[right[left[t]]>s[right[t]] 1.1. Left-Rotate (L)Left-Rotate (L)2.2. Right-Rotate (T)Right-Rotate (T)

TTLL

RRAA

DDCC

BB

EE FF

Page 32: 10 陈启峰《Size Balanced Tree》

MaintainMaintain

Case 2: s[right[left[t]]>s[right[t]] Case 2: s[right[left[t]]>s[right[t]] 1.1. Left-Rotate (L)Left-Rotate (L)2.2. Right-Rotate (T)Right-Rotate (T)3.3. Maintain (L) &Maintain (L) & Maintain (T)Maintain (T)

TTLL

RRAA

CC

BB

EE FF

DD

SBTSBT SBTSBT

Page 33: 10 陈启峰《Size Balanced Tree》

MaintainMaintain

Case 2: s[right[left[t]]>s[right[t]] Case 2: s[right[left[t]]>s[right[t]] 1.1. Left-Rotate (L)Left-Rotate (L)2.2. Right-Rotate (T)Right-Rotate (T)3.3. Maintain (L) &Maintain (L) & Maintain (T)Maintain (T)4.4. Maintain (B)Maintain (B)

BB

SBTSBT SBTSBT

SBTSBT

Page 34: 10 陈启峰《Size Balanced Tree》

MaintainMaintain

通常我们可以确保性质 通常我们可以确保性质 (a) (a) 或 或 (b) (b) 已经已经被满足了。被满足了。

为了提高效率我们可以增加一个布尔型参为了提高效率我们可以增加一个布尔型参数 数 flag flag 来去除无意义的检查。来去除无意义的检查。

Page 35: 10 陈启峰《Size Balanced Tree》

1.1. IfIf flag=false flag=false thenthen2.2. IfIf s[left[left[t]]>s[right[t]] s[left[left[t]]>s[right[t]] then then //case 1//case 13.3. Right-Rotate(t) //case 1Right-Rotate(t) //case 14.4. Else ifElse if s[right[left[t]]>s[right[t]] s[right[left[t]]>s[right[t]] then then //case 2//case 25.5. Left-Rotate(left[t]) //case 2Left-Rotate(left[t]) //case 26.6. Right-Rotate(t) //case 2Right-Rotate(t) //case 27.7. Else Else exit //needn’t repairexit //needn’t repair8.8. Else ifElse if s[right[right[t]]>s[left[t]] s[right[right[t]]>s[left[t]] then then //case 1’//case 1’9.9. Left-Rotate(t) //case 1’Left-Rotate(t) //case 1’10.10. Else ifElse if s[left[right[t]]>s[left[t]] s[left[right[t]]>s[left[t]] then then //case 2’//case 2’11.11. Right-Rotate(right[t]) Right-Rotate(right[t]) //case 2’ //case 2’12.12. Left-Rotate(t) Left-Rotate(t) //case 2’//case 2’13.13. Else Else exit //needn’t repairexit //needn’t repair

MaintainMaintain

Page 36: 10 陈启峰《Size Balanced Tree》

MaintainMaintain

14.14. Maintain(left[t],false) //repair the left subtreeMaintain(left[t],false) //repair the left subtree15.15. Maintain(right[t],true) //repair the right subtrMaintain(right[t],true) //repair the right subtr

eeee16.16. Maintain(t,false)Maintain(t,false) //repair the whole tree//repair the whole tree17.17. Maintain(t,true) Maintain(t,true) //repair the whole tree//repair the whole tree

Page 37: 10 陈启峰《Size Balanced Tree》

AnalysisAnalysis

Analysis Of HeightAnalysis Of Height F[H]——F[H]—— 高度为 高度为 H H 的的 SBTSBT 最少的结点个最少的结点个

数。数。

F[H]=Fibonacci[H+2]-1F[H]=Fibonacci[H+2]-1H 13 17 21 25 29

F[H] 986 6764 46367 317810 2178308

Page 38: 10 陈启峰《Size Balanced Tree》

AnalysisAnalysis

Analysis Of HeightAnalysis Of Height 定理:定理: NN 个结点的个结点的 SBTSBT 的最坏深度为最大的最坏深度为最大

的的 HH 且满足 且满足 F[H] ≤ NF[H] ≤ N 。。 因此因此

Max_Height[N] ≤1.44logMax_Height[N] ≤1.44log22(N+1.5)(N+1.5)-1.33-1.33

Page 39: 10 陈启峰《Size Balanced Tree》

AnalysisAnalysis

Analysis Of MaintainAnalysis Of Maintain

设 设 SD SD 为所有结点的深度之和为所有结点的深度之和

结论结论 (1)(1)在在 MaintainMaintain 的旋转后的旋转后 SDSD 总是递减总是递减

Page 40: 10 陈启峰《Size Balanced Tree》

AnalysisAnalysis

Analysis Of MaintainAnalysis Of Maintain Case 1 : s[A]>s[R]Case 1 : s[A]>s[R]

SDSD 减少了 减少了 s[A]-s[R]s[A]-s[R] (( 正整数正整数 ))

TT

LL RR

AA BB DDCC

TT

LL

RR

AA

BB

DDCC

Page 41: 10 陈启峰《Size Balanced Tree》

AnalysisAnalysis

Analysis Of MaintainAnalysis Of Maintain Case 2 : s[B]>s[R]Case 2 : s[B]>s[R]

SDSD 减少了减少了 s[B]-s[R]+1s[B]-s[R]+1 (( 正整数正整数 ))

TT

LL RR

AA DDCCBB

EE FF

TTLL

RRAA

DDCC

BB

EE FF

Page 42: 10 陈启峰《Size Balanced Tree》

AnalysisAnalysis

Analysis Of MaintainAnalysis Of Maintain

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

综合结论(综合结论( 11 )()( 22 )我们得到)我们得到

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

Page 43: 10 陈启峰《Size Balanced Tree》

AnalysisAnalysis

Analysis Of OperationsAnalysis Of OperationsInsertInsert O(logn)O(logn)DeleteDelete O(logn)O(logn)FindFind O(logn)O(logn)RankRank O(logn)O(logn)SelectSelect O(logn)O(logn)

PredPred O(logn)O(logn)SuccSucc O(logn)O(logn)

Page 44: 10 陈启峰《Size Balanced Tree》

AdvantageAdvantage

七大优点七大优点1.1. 速度快速度快

Page 45: 10 陈启峰《Size Balanced Tree》

AdvantageAdvantage

I nsert 2, 000, 000 nodes wi th random val ues

SBT 7. 13AVL 8. 34

Treap11. 36

Randomi zedBST 13. 61

0

2

4

6

8

10

12

14

16

seco

nd

环境 : 512MbPentium M 1.6G

Page 46: 10 陈启峰《Size Balanced Tree》

AdvantageAdvantage

Perform 2, 000, 000 operati ons of 66% i nserti onand 33% del eti on wi th random val ues

SBT 5. 59

Randomzi edBST 10. 47

AVL 7. 42

Treap8. 86

0

2

4

6

8

10

12

seco

nd

环境 : 512MbPentium M 1.6G

Page 47: 10 陈启峰《Size Balanced Tree》

AdvantageAdvantage

Perform 2, 000, 000 operati ons of 20% i nserti on, 10% del eti on and 60% query wi th random val ues

SBT 3. 39

Randomi zedBST 6. 21

AVL 4. 21

Treap5. 67

0

1

2

3

4

5

6

7

seco

nd

7

环境 : 512MbPentium M 1.6G

Page 48: 10 陈启峰《Size Balanced Tree》

AdvantageAdvantage

七大优点七大优点1.1. 速度快速度快2.2. 性能高性能高

Page 49: 10 陈启峰《Size Balanced Tree》

AdvantageAdvantage

插入 插入 2,000,000 2,000,000 个关键字随机的结点个关键字随机的结点

类型 SBT AVL TreapRandomized BST

SplayPerfect BST

平均深度 19.24 19.33 26.51 25.53 37.20 18.95

高度 24 24 50 53 78 20

旋转次数 157万

140万

399万 400 万 2515 万 ?

Page 50: 10 陈启峰《Size Balanced Tree》

AdvantageAdvantage

插入 插入 2,000,000 2,000,000 个关键字有序的结点个关键字有序的结点

类型 SBT AVL TreapRandomized BST

SplayPerfect BST

平均深度 18.95 18.95 25.7 26.29 999999.5 18.95

高度 20 20 51 53 1999999 20

旋转次数 200万

200万

200万 200 万 0 ?

Page 51: 10 陈启峰《Size Balanced Tree》

AdvantageAdvantage

七大优点七大优点1.1. 速度快速度快2.2. 性能高性能高3.3. 调试易调试易

Page 52: 10 陈启峰《Size Balanced Tree》

AdvantageAdvantage

七大优点七大优点1.1. 速度快速度快2.2. 性能高性能高3.3. 调试易调试易4.4. 代码短代码短

Page 53: 10 陈启峰《Size Balanced Tree》

AdvantageAdvantage

七大优点七大优点1.1. 速度快速度快2.2. 性能高性能高3.3. 调试易调试易4.4. 代码短代码短5.5. 空间少空间少

Page 54: 10 陈启峰《Size Balanced Tree》

AdvantageAdvantage

七大优点七大优点1.1. 速度快速度快2.2. 性能高性能高3.3. 调试易调试易4.4. 代码短代码短5.5. 空间少空间少6.6. 功能强功能强

Page 55: 10 陈启峰《Size Balanced Tree》

AdvantageAdvantage

七大优点七大优点1.1. 速度快速度快2.2. 性能高性能高3.3. 调试易调试易4.4. 代码短代码短5.5. 空间少空间少6.6. 功能强功能强7.7. 应用广应用广

Page 56: 10 陈启峰《Size Balanced Tree》

AdvantageAdvantage

在信息学竞赛中的应用在信息学竞赛中的应用

1.1. Happy Birthday(NOI2006)Happy Birthday(NOI2006)2.2. 郁闷的出纳员郁闷的出纳员 (NOI2004)(NOI2004)3.3. 营业额统计营业额统计 (HNOI2002)(HNOI2002)4.4. 宠物收养所宠物收养所 (HNOI2004)(HNOI2004)

…………

Page 57: 10 陈启峰《Size Balanced Tree》

感性与理性中螺旋前进感性与理性中螺旋前进

探索历程探索历程

Page 58: 10 陈启峰《Size Balanced Tree》

IfIf s[left[t]]>s[right[t]] s[left[t]]>s[right[t]] thenthen right_rotate(t) right_rotate(t) 简 单简 单

效果不好,不一定效果不好,不一定能降低平均深度能降低平均深度

Page 59: 10 陈启峰《Size Balanced Tree》

IfIf s[left[left[t]]]>s[right[t]] s[left[left[t]]]>s[right[t]]then then right_rotate (t)right_rotate (t)能降低平均深度。可能这是解能降低平均深度。可能这是解决有序和随机数据的最好方法决有序和随机数据的最好方法

效果不好,不一定效果不好,不一定能降低平均深度能降低平均深度

IfIf s[left[t]]>s[right[t]] s[left[t]]>s[right[t]] thenthen right_rotate(t) right_rotate(t) 简 单简 单

Page 60: 10 陈启峰《Size Balanced Tree》

IfIf s[left[left[t]]]>s[right[t]] s[left[left[t]]]>s[right[t]]then then right_rotate (t)right_rotate (t)能降低平均深度。可能这是解能降低平均深度。可能这是解决有序和随机数据的最好方法决有序和随机数据的最好方法

依赖数据.依赖数据.对于人字形数据,BST,BST会退化成会退化成 O(N)O(N) 深深

度度

IfIf s[left[t]]>s[right[t]] s[left[t]]>s[right[t]] thenthen right_rotate(t) right_rotate(t) 简 单简 单

效果不好,不一定效果不好,不一定能降低平均深度能降低平均深度

Page 61: 10 陈启峰《Size Balanced Tree》

依赖数据.对于人依赖数据.对于人字形数据,BST字形数据,BST会退化成会退化成 O(N)O(N) 深深

度度

添加添加If If s[right[left[t]]]>s[right[t]]s[right[left[t]]]>s[right[t]]then then left_rotate (left[t])left_rotate (left[t]) right_rotate (t)right_rotate (t)

效果不好,不一定效果不好,不一定能降低平均深度能降低平均深度

IfIf s[left[left[t]]]>s[right[t]] s[left[left[t]]]>s[right[t]]then then right_rotate (t)right_rotate (t)能降低平均深度。这应该是解能降低平均深度。这应该是解决有序和随机数据的很好方法决有序和随机数据的很好方法

Page 62: 10 陈启峰《Size Balanced Tree》

时间复杂度时间复杂度不容易分析不容易分析

IfIf s[left[left[t]]]>s[right[t]] s[left[left[t]]]>s[right[t]]then then right_rotate (t)right_rotate (t)能降低平均深度。可能这是解能降低平均深度。可能这是解决有序和随机数据的最好方法决有序和随机数据的最好方法

依赖数据.对于人依赖数据.对于人字形数据,BST字形数据,BST会退化成会退化成 O(N)O(N) 深深

度度添加添加If If s[right[left[t]]]>s[right[t]]s[right[left[t]]]>s[right[t]]then then left_rotate (left[t])left_rotate (left[t]) right_rotate (t)right_rotate (t)

Page 63: 10 陈启峰《Size Balanced Tree》

依赖数据.对于人依赖数据.对于人字形数据,BST字形数据,BST会退化成会退化成 O(N)O(N) 深深

度度

添加添加If If s[right[left[t]]]>s[right[t]]s[right[left[t]]]>s[right[t]]then then left_rotate (left[t])left_rotate (left[t]) right_rotate (t)right_rotate (t)

Page 64: 10 陈启峰《Size Balanced Tree》

探索历程探索历程 在此感谢在此感谢

我的英语老师我的英语老师 FionaFiona

复旦大学的姚子渊复旦大学的姚子渊

香港大学的麦原和 香港大学的麦原和 Professor Golin Professor Golin

Page 65: 10 陈启峰《Size Balanced Tree》

附附

想获得更详尽的内容,请参考想获得更详尽的内容,请参考我的论文我的论文。。

Page 66: 10 陈启峰《Size Balanced Tree》

InsertionInsertion Simple-Insert (t,v)Simple-Insert (t,v)1.1. IfIf t=0 t=0 thenthen2.2. t←NEW-NODE(v)t←NEW-NODE(v)3.3. ElseElse4.4. s[t] ←s[t]+1s[t] ←s[t]+15.5. IfIf v<key[t] v<key[t] thenthen6.6. Simple-Insert(left[t],v)Simple-Insert(left[t],v)7.7. ElseElse8.8. Simple-Insert(right[t],v)Simple-Insert(right[t],v)9.9. Maintain (t,vMaintain (t,v≥key[t]≥key[t]))

Page 67: 10 陈启峰《Size Balanced Tree》

DeletionDeletion

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

如果没有要删除的点就删除最后搜索到的如果没有要删除的点就删除最后搜索到的结点。结点。

Page 68: 10 陈启峰《Size Balanced Tree》

DeletionDeletion1.1. IfIf s[t]≤2 s[t]≤2 thenthen2.2. record←key[t]record←key[t]3.3. t←left[t]+right[t]t←left[t]+right[t]4.4. exitexit5.5. s[t] ←s[t]s[t] ←s[t] -- 116.6. IfIf v=key[t] v=key[t] thenthen7.7. Delete(left[t],v[t]+1)Delete(left[t],v[t]+1)8.8. Key[t] ←recordKey[t] ←record9.9. Maintain(t,true)Maintain(t,true)10.10.ElseElse ifif v<key[t] v<key[t] thenthen11.11. Delete(left[t],v)Delete(left[t],v)12.12. ElseElse 13.13. Delete(right[t],v)Delete(right[t],v)14.14. Maintain(t,v<key[t])Maintain(t,v<key[t])

Page 69: 10 陈启峰《Size Balanced Tree》

DeletionDeletion

其实结合其实结合 SBT-InsertSBT-Insert 地使用地使用 Simple-DelSimple-Deleteete 时间复杂度仅仅是时间复杂度仅仅是 O(log n*)O(log n*) 。其中。其中 nn** 是总的插入次数。是总的插入次数。

Simple-DeleteSimple-Delete 不仅更简单而且常数非常不仅更简单而且常数非常小。小。

Page 70: 10 陈启峰《Size Balanced Tree》

ff

TT

LL RR

AA BB DDCC

Page 71: 10 陈启峰《Size Balanced Tree》

TT

LL RR

AA DDCCBB

EE FF

Page 72: 10 陈启峰《Size Balanced Tree》

TT

LL RR

AA BB DDCC

Page 73: 10 陈启峰《Size Balanced Tree》

TT

LL RR

AA BB DDCC

Page 74: 10 陈启峰《Size Balanced Tree》

TTLL

RRAA BB

DDCC

Page 75: 10 陈启峰《Size Balanced Tree》

TT

LL

RR

AA

BB

DDCC

Page 76: 10 陈启峰《Size Balanced Tree》

TT

LL RR

AA DDCCBB

EE FF

Page 77: 10 陈启峰《Size Balanced Tree》

TT

LL RR

AA DDCCBB

EE FF

Page 78: 10 陈启峰《Size Balanced Tree》

TT

LL RR

AA DDCCBB

EE FF

Page 79: 10 陈启峰《Size Balanced Tree》

TT

LL

RR

AA

DDCCBB

EE FF

Page 80: 10 陈启峰《Size Balanced Tree》

TT

LL

RR

AA

DDCC

BB

EE

FF

Page 81: 10 陈启峰《Size Balanced Tree》

TT

LL

RR

AA

DDCC

BB

EE

FF

Page 82: 10 陈启峰《Size Balanced Tree》

TT

LL

RR

AA

DDCC

BB

EE

FF

Page 83: 10 陈启峰《Size Balanced Tree》

TT

LL RR

AA DDCC

BB

EE

FF

Page 84: 10 陈启峰《Size Balanced Tree》

TTLL

RRAA

DDCC

BB

EE FF

Page 85: 10 陈启峰《Size Balanced Tree》

TTLL

RRAA

DDCC

BB

EE FF

Page 86: 10 陈启峰《Size Balanced Tree》

插插入入人人字字形形数数据据后后退退化化的的

SBT V2.0SBT V2.0

Page 87: 10 陈启峰《Size Balanced Tree》
Page 88: 10 陈启峰《Size Balanced Tree》

TT

LL RR

AA BB

Page 89: 10 陈启峰《Size Balanced Tree》

TT

LL RR

AA BB

Page 90: 10 陈启峰《Size Balanced Tree》

TT

LL

RR

AA

BB