- 1
- 0
- 约4.5千字
- 约 9页
- 2016-11-27 发布于河南
- 举报
DST详解beta1
DST详解
风过叶落
几个月前,小魚兒小魚兒过程DST相对更加平衡。
删除操作的伪代码如下:
1 Delete(k,p) 2 S[p] ← S[p]-1 3 If Key[p]k then Delete(k,Right[p]) 4 else 5 If Key[p]=0 then 6 If S[p]=0 then p=0 7 else 8 If S[Left[p]]=S[Right[p]] then 9 Key[p]←maximum(Left[p]) 10 Delete(Key[p],Left[p]) 11 else 12 Key[p]←minimunm(Right[p]) 13 Delete(Key[p],Right[p]) 14 else delete(k,Right[p]) 15 Maintain(p,ture) 16 Maintain(p,false)
DST的平衡
(1)DST的旋转
在介绍具体算法之前,有必要明确一下二叉搜索树保持平衡的方法——旋转。
图 1
图 2
3所示,对T(Left[A])做一次左旋操作,然后对T(A)做一次右旋操作;或者对 T(Right[A])做一次右旋操作,然后对T(A)做一次左旋操作,叫做对T(A)进行“复杂旋转”。
图 3
这个条件被称为DST的平衡条件,在本文中简称平衡条件。
])都是DST时,我们认为T(A)是一棵DST。
(3)DST的平衡维护(maintain)以及维护的时间复杂度
在一棵DST(设为T(A))中插入或者删除节点有可能会导致它不再平衡,这时需要利用maintain过程对T(A)进行维护。
首先给出maintain过程的伪代码:
1 Maintain(p,flag) 2 If flag then 3 If S( Left[p] )= S( Right[p] ) *2 +1 then exit 4 else 5 If S ( Left [ Lfet[p] ])S( Right [ Left[p] ] ) then Left_Rotate( Left[p] ) 6 Right_Rotate(p) 7 else 8 If S( Right[p] )=S( Left[p]) *2 +1 then exit 9 else 10 If S ( Right[ Right[p] ] )S ( Left[ Right[p] ] ) then Right_Rotate(Right[p]) 11 Left_Rotate(p) 12 Maintain (Left[p],false) 13 Maintain (Left[p],true) 14 Maintain (Right[p],false) 15 Maintain (Right[p],true)
在这里我们只讨论在某些操作(如插入、删除、维护平衡时的旋转)使得
从而导致T(A)不平衡的情况,而对称的情况可以得到类似的结论。
①如图2, 时,我们对T(A)进行一次简单旋转(右旋)。
②如图3,当 时,我们对T(A)进行一次复杂旋转(左旋左子树,右旋整个子树)。
可以证明,这样旋转之后,整棵子树一定是平衡的。但是我们不能保证旋转后的左右子树也是平衡的,所以需要对左右子树进行维护。因为对于一棵子树的操作不会影响它的兄弟子树和它的父亲,所以没有必要再次对T(A)进行维护。
由于每次旋转之后T(A)所有结点的深度和至少减少了1 [2],而这个深度和是的。因此建立一棵DST至多进行了次旋转,所以,对于T(A)的每个结点,插入或者删除它的均摊时间复杂度是。而插入一个结点共调用了次 maintain 操作,所以每次 maintain 的均摊时间复杂度是。
(4)DST的最坏高度
在以上的论述中,我们得到了DST支持的所有操作的时间复杂度都依赖于它的高度的结论,下面将给出DST的最坏高度是的证明。
您可能关注的文档
最近下载
- 制造业信息化战略规划实施与优化-PDM.docx VIP
- 那智不二越机器人flexgui toolbox操作说明书.pdf VIP
- 智慧工厂-智慧工厂解决方案.docx VIP
- 高中化学解题方法归纳:和量法.doc VIP
- 译林牛津新版高中英语(必修1-3)单词表.pdf VIP
- 包装有限公司分切机安全风险分级清单.docx VIP
- 重庆市西南大学附属中学2025届高三下学期二诊模拟考试物理试卷 含解析.docx VIP
- 【高中英语】《星火英语同步词汇》抗遗忘速记手册.docx VIP
- 成都市锦江区2026届初三一诊(暨期末考试)数学试卷(含答案).docx
- 三坐标 培训教程.pptx VIP
原创力文档

文档评论(0)