欢迎来到天天文库
浏览记录
ID:14692291
大小:226.50 KB
页数:24页
时间:2018-07-29
《算法合集之《左偏树的特点及其应用》》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、本资料由-大学生创业
2、创业
3、创业网http://www.chuangyw.com/提供资料左偏树的特点及其应用广东省中山市第一中学黄源河【摘要】本文较详细地介绍了左偏树的特点以及它的各种操作。第一部分提出可并堆的概念,指出二叉堆的不足,并引出左偏树。第二部分主要介绍了左偏树的定义和性质。第三部分详细地介绍了左偏树的各种操作,并给出时间复杂度分析。第四部分通过一道例题,说明左偏树在当今信息学竞赛中的应用。第五部分对各种可并堆作了一番比较。最后总结出左偏树的特点以及应用前景。【关键字】左偏树可并堆优先队列【目录】一
4、、引言2二、左偏树的定义和性质22.1优先队列,可并堆22.1.1优先队列的定义22.1.2可并堆的定义22.2左偏树的定义32.3左偏树的性质4三、左偏树的操作53.1左偏树的合并53.2插入新节点73.3删除最小节点83.4左偏树的构建83.5删除任意已知节点93.6小结12四、左偏树的应用134.1例——数字序列(Baltic2004)13五、左偏树与各种可并堆的比较155.1左偏树的变种——斜堆155.2左偏树与二叉堆的比较165.3左偏树与其他可并堆的比较16六、总结18在线代理
5、网页代理
6、代理网页
7、
8、http://www.dailiav.com减肥药排行榜
9、淘宝最好的减肥药
10、什么减肥药效果最好
11、减肥瘦身药
12、http://pigproxy.cn本资料由-大学生创业
13、创业
14、创业网http://www.chuangyw.com/提供资料【正文】一、引言优先队列在信息学竞赛中十分常见,在统计问题、最值问题、模拟问题和贪心问题等等类型的题目中,优先队列都有着广泛的应用。二叉堆是一种常用的优先队列,它编程简单,效率高,但如果问题需要对两个优先队列进行合并,二叉堆的效率就无法令人满意了。本文介绍的左偏树,可以很好地解决这
15、类问题。二、左偏树的定义和性质在介绍左偏树之前,我们先来明确一下优先队列和可并堆的概念。2.1优先队列,可并堆2.1.1优先队列的定义优先队列(PriorityQueue)是一种抽象数据类型(ADT),它是一种容器,里面有一些元素,这些元素也称为队列中的节点(node)。优先队列的节点至少要包含一种性质:有序性,也就是说任意两个节点可以比较大小。为了具体起见我们假设这些节点中都包含一个键值(key),节点的大小通过比较它们的键值而定。优先队列有三个基本的操作:插入节点(Insert),取得最小节点(Minimu
16、m)和删除最小节点(Delete-Min)。2.1.2可并堆的定义可并堆(MergeableHeap)也是一种抽象数据类型,它除了支持优先队列的三个基本操作(Insert,Minimum,Delete-Min),还支持一个额外的操作——合并操作:H←Merge(H1,H2)Merge()构造并返回一个包含H1和H2所有元素的新堆H。前面已经说过,如果我们不需要合并操作,则二叉堆是理想的选择。可惜合并二叉堆的时间复杂度为O(n),用它来实现可并堆,则合并操作必然成为算法的瓶颈。左偏树(LeftistTree)、二
17、项堆(BinomialHeap)和Fibonacci堆(FibonacciHeap)都是十分优秀的可并堆。本文讨论的是左偏树,在后面我们将看到各种可并堆的比较。在线代理
18、网页代理
19、代理网页
20、http://www.dailiav.com减肥药排行榜
21、淘宝最好的减肥药
22、什么减肥药效果最好
23、减肥瘦身药
24、http://pigproxy.cn本资料由-大学生创业
25、创业
26、创业网http://www.chuangyw.com/提供资料2.2左偏树的定义左偏树(LeftistTree)是一种可并堆的实现。左偏树是一棵二叉树,它
27、的节点除了和二叉树的节点一样具有左右子树指针(left,right)外,还有两个属性:键值和距离(dist)。键值上面已经说过,是用于比较节点的大小。距离则是如下定义的:节点i称为外节点(externalnode),当且仅当节点i的左子树或右子树为空(left(i)=NULL或right(i)=NULL);节点i的距离(dist(i))是节点i到它的后代中,最近的外节点所经过的边数。特别的,如果节点i本身是外节点,则它的距离为0;而空节点的距离规定为-1(dist(NULL)=-1)。在本文中,有时也提到一棵左
28、偏树的距离,这指的是该树根节点的距离。左偏树满足下面两条基本性质:[性质1]节点的键值小于或等于它的左右子节点的键值。即key(i)≤key(parent(i))这条性质又叫堆性质。符合该性质的树是堆有序的(Heap-Ordered)。有了性质1,我们可以知道左偏树的根节点是整棵树的最小节点,于是我们可以在O(1)的时间内完成取最小节点操作。[性质2]节点的左子节点的距离不小于右子节点
此文档下载收益归作者所有