信息学数据结构左偏树_第1页
信息学数据结构左偏树_第2页
信息学数据结构左偏树_第3页
信息学数据结构左偏树_第4页
信息学数据结构左偏树_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、左偏树的特点及其应用广东省中山市第一中学 黄源河2左偏树的定义左偏树(Leftist Tree)是一种可并堆(Mergeable Heap) ,它除了支持优先队列的三个基本操作(插入,删除,取最小节点),还支持一个很特殊的操作合并操作。左偏树是一棵堆有序(Heap Ordered)二叉树。左偏树满足左偏性质(Leftist Property)。3左偏树的定义 左偏性质定义一棵左偏树中的外节点(External Node) 为左子树或右子树为空的节点。定义节点 i 的距离(dist(i) 为节点 i 到它的后代中,最近的外节点所经过的边数。任意节点的左子节点的距离不小于右子节点的距离(左偏性质)

2、。 由左偏性质可知,一个节点的距离等于以该节点为根的子树最右路径的长度。4左偏树的性质定理:若一棵左偏树有N个节点,则该左偏树的距离不超过 log(N+1) -1。最右路径: ACG最右路径节点数 = 3距离 = 28个节点的左偏树的最大距离:log(8+1) -1 = 2ABD00012EHF0G01C最右路径长度即为左偏树的距离5左偏树的操作左偏树支持下面这些操作:MakeNull 初始化一棵空的左偏树Merge 合并两棵左偏树Insert 插入一个新节点Min 取得最小节点DeleteMin 删除最小节点Delete 删除任意已知节点Decrease 减小一个节点的键值6左偏树的操作 合

3、并合并操作是递归进行的a dist(L1)aL1R交换左右子树并更新根节点距离合并后的右子树距离可能大于左子树距离9左偏树的操作 合并合并操作的代码如下:Function Merge(A, B)If A = NULL Then return BIf B = NULL Then return AIf key(B) dist(left(A) Thenswap(left(A), right(A)If right(A) = NULL Then dist(A) 0Else dist(A) dist(right(A) + 1return AEnd Function10左偏树的操作 合并下面是一个合并的例子

4、:61218243718700120013108261711000Merge (3, 6)11左偏树的操作 合并下面是一个合并的例子:61218243718782617Merge (8, 6)Merge (3, 6)12左偏树的操作 合并下面是一个合并的例子:3718782617Merge (8, 7)Merge (8, 6)Merge (3, 6)13左偏树的操作 合并下面是一个合并的例子:18Merge (8,18)Merge (8, 7)Merge (8, 6)Merge (3, 6)NULL8261714左偏树的操作 合并下面是一个合并的例子:Merge (8, 7)Merge (8,

5、 6)Merge (3, 6)188261737701?15左偏树的操作 合并下面是一个合并的例子:Merge (8, 6)Merge (3, 6)1122617371886121824716左偏树的操作 合并下面是一个合并的例子:Merge (3, 6)02?2617737188612182431017左偏树的操作 合并下面是一个合并的例子:Merge (3, 6)2617737188612182431020118左偏树的操作 合并合并操作都是一直沿着两棵左偏树的最右路径进行的。一棵N个节点的左偏树,最右路径上最多有 log(N+1) 个节点。因此,合并操作的时间复杂度为:O(log N1

6、+ log N2) = O(log N)19左偏树的操作 插入插入一个新节点把待插入节点作为一棵单节点左偏树合并两棵左偏树时间复杂度:O(log N)Merge20左偏树的操作 删除删除最小节点删除根节点合并左右子树时间复杂度:O(log N)Merge21例题:数字序列给定一个整数序列 a1 , a2 , , an,求一个不下降序列 b1b2bn,使得数列 ai 和 bi 的各项之差的绝对值之和 |a1 - b1| + |a2 - b2| + + |an - bn| 最小。数据规模:1n106, 0ai2*109 22假设数列 a1,a2, ,ak 的最优解为 b1,b2, ,bk合并 bi

7、 中相同的项,得到 m 个区间和数列 s1,s2, ,sm显然,si 为数列 a 中,下标在第 i 个区间内的各项的中位数。bb1 b2 b3 b4 b5 b6 b7 b8 bk s1 s2 sm-1 smak+1加入ak+1后,怎样得到前k+1项的最优解?例题:数字序列 算法分析23若ak+1sm,直接令sm+1ak+1,得到前k+1项的最优解;否则,将ak+1并入第m个区间,并更新sm不断 检查最后两个区间的解 sm-1和 sm,若sm-1sm,合并最后两个区间,并令新区间的解为该区间内的中位数。b s1 s2 sm-1 smak+1smsm-1例题:数字序列 算法分析24下面考虑数据结构

8、的选取我们需要维护若干个有序集,并能够高效完成下面两个操作:合并两个有序集查询某个有序集的中位数进一步分析,加入一个元素后,发生一连串合并操作,合并后有序集的中位数不会比原来大因此,每个有序集内只保存较小的一半元素,查询中位数操作转化为取最大元素操作。例题:数字序列 算法分析25例题:数字序列 算法分析现在,我们需要合并、取最大元素和删除三种操作,而这些都是可并堆的基本操作。下表列出了几种可并堆相应操作的时间复杂度操作二叉堆左偏树二项堆Fibonacci堆取最小节点O(1)O(1)O(1)O(1)插入O(log N)O(log N)O(1)O(1)删除最小节点O(log N)O(log N)O(log N)O(log N)合并O(N)O(log N)O(log N)O(1)26例题:数字序列 算法分析在本题中,合并操作和取最大元素操作少于 n次,删除操作不超过 n/2 次由于合并次数比较多,二叉堆的合并操作太慢了,总时间复杂度也无法令人满意。二项堆和Fibonacci堆某些操作比左偏树快,但对于本题,三者的总时间复杂度均为O(nlogn)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论