堆与不相交数据结构.ppt
《堆与不相交数据结构.ppt》由会员分享,可在线阅读,更多相关《堆与不相交数据结构.ppt(49页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、堆和不相交数据结构第一张,PPT共四十九页,创作于2022年6月二叉树性质二叉树性质 (Page 71)(Page 71)性质性质1 1:在二叉树中,第:在二叉树中,第j j层的顶点数最多是层的顶点数最多是2 2j j。性质性质2 2:令二叉树:令二叉树T T顶点数是顶点数是n n,高度是,高度是k k,那么,那么如果如果T T是完全的,等号成立。如果是完全的,等号成立。如果T T是几乎完全的,那么是几乎完全的,那么性质性质3 3:有:有n n个顶点的完全或几乎完全的二叉树的高度是个顶点的完全或几乎完全的二叉树的高度是性质4:对任何一棵二叉树T,如果其终端结点数为n0,度为2的结点数为n2,则
2、n0=n2+1第二张,PPT共四十九页,创作于2022年6月2性质:对任何一棵二叉树T,如果其终端结点数为n0,度为2的结点数为n2,则n0=n2+1证明:n1为二叉树T中度为1的结点数 因为:二叉树中所有结点的度均小于或等于2 所以:其结点总数n=n0+n1+n2 又二叉树中,除根结点外,其余结点都只有一个 分支进入 设B为分支总数,则n=B+1 又:分支由度为1和度为2的结点射出,B=n1+2n2 于是,n=B+1=n1+2n2+1=n0+n1+n2 n0=n2+1第三张,PPT共四十九页,创作于2022年6月性质性质5 5:如果对一棵有:如果对一棵有n n个结点的完全二叉树的结点按层序编
3、号,个结点的完全二叉树的结点按层序编号,则对任一结点则对任一结点i(1in),有:,有:(1)(1)如果如果i=1i=1,则结点,则结点i i是二叉树的根,无双亲;如果是二叉树的根,无双亲;如果i1i1,则,则其双亲是其双亲是i/2 (2)(2)如果如果2in2in,则结点,则结点i i无左孩子;如果无左孩子;如果2in,则其左孩子,则其左孩子是是2i2i (3)(3)如果如果2i+1n2i+1n,则结点,则结点i i无右孩子;如果无右孩子;如果2i+1n,则其右,则其右孩子是孩子是2i+12i+1第四张,PPT共四十九页,创作于2022年6月44.1 引言(堆、不相交集)引言(堆、不相交集)
4、4.2 堆堆 4.2.1 堆上的运算堆上的运算 4.2.2 创建堆创建堆 4.2.3 堆排序堆排序 4.2.4 最大堆和最小堆最大堆和最小堆4.3 不相交集数据结构不相交集数据结构 4.3.1 按秩合并措施按秩合并措施 4.3.3 Union-Find算法算法 4.3.2 路径压缩路径压缩 4.3.4 Union-Find算法的分析(略)算法的分析(略)第五张,PPT共四十九页,创作于2022年6月54.2 堆堆堆的引入堆的引入在许多算法中,需要支持下面二种运算:在许多算法中,需要支持下面二种运算:在许多算法中,需要支持下面二种运算:在许多算法中,需要支持下面二种运算:u插入元素插入元素u寻找
5、最大值元素(或最小值元素)寻找最大值元素(或最小值元素)支持这二种运算的数据结构称为优先队列。支持这二种运算的数据结构称为优先队列。支持这二种运算的数据结构称为优先队列。支持这二种运算的数据结构称为优先队列。可采用下述三种方法实现优先队列:可采用下述三种方法实现优先队列:使用普通队列(或数组),插入容易(尾部),但寻使用普通队列(或数组),插入容易(尾部),但寻找最大值需搜索整个队列,开销比较大。找最大值需搜索整个队列,开销比较大。使用排序数组,寻找最大值元素容易,插入操作需使用排序数组,寻找最大值元素容易,插入操作需移动很多元素。移动很多元素。使用堆,寻找最大值元素容易,插入操作仅需移动使用
6、堆,寻找最大值元素容易,插入操作仅需移动少量元素。少量元素。第六张,PPT共四十九页,创作于2022年6月6定义4.1(Page 74)一个(二叉)堆是一棵几乎完全的二叉树,它的每个结点都满足堆的特性:设v是一个结点,p(v)是v的父结点,那么存储在p(v)中的数据项键值大于或等于存储在v中的数据项键值。堆的定义(二叉堆)几乎完全二叉树(几乎完全二叉树(Page 71Page 71)如果一棵二叉树,除了如果一棵二叉树,除了最右边最右边位置上位置上的一个或几个的一个或几个叶子叶子可能缺少外,它是丰可能缺少外,它是丰满的,我们定义它为几乎完全二叉树。满的,我们定义它为几乎完全二叉树。几乎完全二叉树
7、例几乎完全二叉树例第七张,PPT共四十九页,创作于2022年6月7堆数据结构支持下列运算uDeleteMax(H):从一个非空堆H中,删除最大键值的数据项,并返回该数据;uInsert(H,x):将数据项x插入堆H中;uDelete(H,i):从堆中删除第i项;uMakeHeap(A):将数组转换为堆。堆的蕴含特性:沿着每条从根到叶子的路径,元素的键值以降序(或称非升序)排列。第八张,PPT共四十九页,创作于2022年6月8堆的表示 有有n n个结点堆个结点堆T T,可以用一个数组,可以用一个数组H1.nH1.n用下面方式来表示:用下面方式来表示:uuT T的根结点存储在的根结点存储在H1H1
8、中;中;uu设设T T的结点存储在的结点存储在HHj j 中,如果它有左子结点,则这个左中,如果它有左子结点,则这个左子结点存储在子结点存储在H2H2j j 中。如果它还有右子结点,这个右子结点存中。如果它还有右子结点,这个右子结点存储在储在H2H2j j+1+1;uu若元素若元素HHj j 不是根结点,它的父结点存储在不是根结点,它的父结点存储在HH j j/2/2 中。中。由由“几乎完全二叉树几乎完全二叉树”的定义可知,如果堆中某结点有右子结的定义可知,如果堆中某结点有右子结点,则它一定也有左子结点。点,则它一定也有左子结点。堆具有如下性质:堆具有如下性质:key(Hkey(H j j/2
9、/2)key(H)key(Hj j)2 2 j jnn第九张,PPT共四十九页,创作于2022年6月92011729310411546573879510堆和它的数组表示法堆和它的数组表示法 把存储在堆中的数据项视为键值。按树的结点把存储在堆中的数据项视为键值。按树的结点“自顶向下自顶向下”、“从左至右从左至右”、“按按1 1到到n n”的顺序进行编号,那么数组元素的顺序进行编号,那么数组元素HiHi对对应树中编号为应树中编号为i i的结点。的结点。2 20 01 17 79 91 10 01 11 14 45 53 37 75 51 12 23 34 45 56 67 78 89 91010H
10、2=17H2=17的的左子结点左子结点为为HH2*22*2=H4=10=H4=10H2H2=17=17的的右子结点右子结点为为HH2*2+12*2+1=H5=11=H5=11H9=7H9=7的的父结点父结点为为H H 9/29/2 =H4=10=H4=10 沿着每条从根到叶子沿着每条从根到叶子的路径,元素的键值以的路径,元素的键值以降序排列。降序排列。第十张,PPT共四十九页,创作于2022年6月104.2.1 堆上的运算堆上的运算ShiftUp 假定对于某个假定对于某个i i1 1,HHi i 的键值变成大于它父结点的键值,这的键值变成大于它父结点的键值,这样违反了堆的特性,需使用称为样违反
11、了堆的特性,需使用称为ShiftUpShiftUp的运算来修复堆。的运算来修复堆。ShiftUpShiftUp运算沿着从运算沿着从HHi i 到根结点的惟一路径,把到根结点的惟一路径,把HHi i 移到适合移到适合它的位置上。在移动的每一步中,将它的位置上。在移动的每一步中,将HiHi的键值与它的父结点的键值与它的父结点HH i i/2/2 的键值相比较,若的键值相比较,若uu若若HiHiHH i i/2/2 ,则则HiHi和和HH i i/2/2 互换(上移),继续互换(上移),继续。uu若若HiHHiH i i/2/2 或或 i i1 1,终止。,终止。第十一张,PPT共四十九页,创作于2
12、022年6月11H5=25H5=25H2=17H2=17,互换。互换后,互换。互换后H5=17H5=17、H2=25H2=25;H10=25H10=25H5=11H5=11,互换。互换后,互换。互换后H10=11H10=11、H5=25H5=25;H10H10的键值由的键值由5 5变为变为25252 20 01 17 79 91 10 01 11 14 45 53 37 72 25 51 12 23 34 45 56 67 78 89 91010H2=25H2=25H1=20H1=20,互换。互换后,互换。互换后H2=20H2=20、H1=25H1=25;2 25 52 20 09 91 10
13、 01 17 74 45 53 37 71 11 12 20 01 17 79 91 10 02 25 54 45 53 37 71 11 12 20 02 25 59 91 10 01 17 74 45 53 37 71 11 120201 117172 29 910104 411115 55 510104 45 53 37 7H1=25H1=25位于根结点。此时位于根结点。此时i=1i=1,程序终止。,程序终止。25251010第十二张,PPT共四十九页,创作于2022年6月12过程 ShiftUp(参见Page 75)输入:数组H1.n和索引i(1in)输出:上移Hi(如果需要),使它不
14、大于父结点。1.1.donefalsedonefalse2.2.if if i i1 then exit1 then exit/根结点根结点3.3.repeatrepeat4.4.if key(H if key(Hi i)key(Hkey(H i i/2/2)then)then 5.5.互换互换HHi i 和和HH i i/2/2 6.6.else else 7.7.donetruedonetrue8.8.end if end if9.9.i i i i/2/2 10.10.until(until(i i=1)or done=1)or done 第十三张,PPT共四十九页,创作于2022年6月
15、13ShiftDown 假定对于某个假定对于某个i i n/2n/2(非叶结点)(非叶结点),HHi i 的键值变成小于它的左右子的键值变成小于它的左右子结点结点H2H2i i 或或H2H2i i+1+1 的键值,这样违反了堆的特性,需使用称为的键值,这样违反了堆的特性,需使用称为ShiftDownShiftDown的运算来修复堆。的运算来修复堆。ShiftDown ShiftDown运算使运算使HHi i 下移到二叉树中适合它的位置上。在下移的每一步中,下移到二叉树中适合它的位置上。在下移的每一步中,将将HHi i 的键值与它的子结点键值相比较,若的键值与它的子结点键值相比较,若uuHHi
16、i 子结点键值子结点键值,则则HHi i 与子结点键值中较大者交换(下移),继续;与子结点键值中较大者交换(下移),继续;uuHHi i子结点键值子结点键值 或或 i i n/2n/2,终止。,终止。说明:说明:HHi i 应与它的子结点中键值较大者交换,被交换者将成为原堆中另一个应与它的子结点中键值较大者交换,被交换者将成为原堆中另一个键值较小的子结点的父结点(如果有的话)。键值较小的子结点的父结点(如果有的话)。171710101111111110103 33 3第十四张,PPT共四十九页,创作于2022年6月14说明:若说明:若i i n/2n/2,则该结点位于叶子的位置,无需下移。,则
17、该结点位于叶子的位置,无需下移。n/2n/2 =1515/2/2=7=7 n/2n/2 =1010/2/2=5=5第十五张,PPT共四十九页,创作于2022年6月15H2H2键值由键值由1717变为变为3 32 20 03 39 91 10 01 11 14 45 53 37 75 51 12 23 34 45 56 67 78 89 910102 20 01 11 19 91 10 05 54 45 53 37 73 32 20 01 11 19 91 10 03 34 45 53 37 75 5H5=3H5=3小于小于H10=5H10=5,所以,所以H5H5和和H10H10互换。交换后互换
18、。交换后H5=5H5=5,H10=3H10=3;H10=3H10=3位于叶结点位置。位于叶结点位置。i=10i=10 n/2n/2=5=5,程序终止。,程序终止。H2=3H2=3小于小于H4H4和和H5H5,因为,因为H4H5H4H5,所以,所以H2H2和和H5H5互换。交换后互换。交换后H2=11H2=11,H5=3H5=3;20201 117172 29 93 310104 411115 54 45 53 37 75 53 32 2第十六张,PPT共四十九页,创作于2022年6月16过程过程 ShiftDownShiftDown(Page 76Page 76)输入:数组输入:数组H1.nH
19、1.n和索引和索引i i(11i inn)输出:下移输出:下移HHi i(如果需要),使它不小于子结点。(如果需要),使它不小于子结点。1.1.donefalsedonefalse2.2.if 2if 2i in then exitn then exit/H/Hi i 是叶结点,无需下移。是叶结点,无需下移。3.3.repeatrepeat4.4.i i22i i /i/i指向子结点指向子结点5.5.if(if(i i+1n)and(key(H+1n)and(key(Hi i+1)+1)key(Hkey(Hi i)then)then6.6.i ii i+1+1 /若有右子结点,选择子结点较大者
20、。若有右子结点,选择子结点较大者。7.7.end if end if8.8.if key(H if key(H i i/2/2)key(H)n)or done n)or done 第十七张,PPT共四十九页,创作于2022年6月17插入 为了把元素为了把元素x x插入堆插入堆H H中,先将堆的大小增中,先将堆的大小增1 1,然后元素,然后元素x x添加到添加到H H的末尾,再根据需要将的末尾,再根据需要将x x上移,直到满足堆的特性。若上移,直到满足堆的特性。若新堆的个数为新堆的个数为n n,那么堆树的高度为那么堆树的高度为log2n所以将一个元素插入大小为所以将一个元素插入大小为n n的堆中
21、所需要的时间为的堆中所需要的时间为O(log2n)算法4.1 Insert(Page 76-77)输入:堆H1.n和元素x输出:新堆H1.n+1,x为其元素之一。1.nn+12.Hnx3.ShiftUp(H,n)第十八张,PPT共四十九页,创作于2022年6月18删除 要从大小为n的堆中删除元素Hi,可先用Hn替换Hi,然后将堆的大小减1。设原Hi的键值为key(x),原Hn的键值为key(y),若key(y)key(x),则执行上移y。若key(y)key(x),则执行下移y。若i=1,则表示删除堆的最大值。由于堆树的高度为 log2n,所以删除一个元素所需的时间为O(log2n)。第十九张
22、,PPT共四十九页,创作于2022年6月19算法4.2 Delete(Page 77)输入:非空堆H1.n和索引i(1in)输出:删除Hi的新堆H1.n-11.xHi:yHn/Hi为要删除的元素2.nn-13.if in+1 then exit/删除堆最后一个元素4.Hiy5.if key(y)key(x)then6.ShiftUp(H,i)7.else8.ShiftDown(H,i)9.end if第二十张,PPT共四十九页,创作于2022年6月204.2.2 创建堆方法一 给出有给出有n n个元素的数组个元素的数组A1.nA1.n,要创建一个包含这些元素的要创建一个包含这些元素的堆可以这样
23、进行:堆可以这样进行:首先假设堆由首先假设堆由1 1个元素构成,然后将第个元素构成,然后将第2 2个、第个、第3 3个元素插入个元素插入堆,直至堆,直至n n个。个。插入第插入第i i个元素,上移次数个元素,上移次数(循环次数循环次数)最多为最多为 loglog2 2i i,因此采用,因此采用这种方法创建堆的时间复杂性为这种方法创建堆的时间复杂性为O(nlogO(nlog2 2n)n)。算法算法 MakeHeapByInsertMakeHeapByInsert(参见(参见Page 77Page 77)输入:输入:n n个元素的数组个元素的数组A1.nA1.n输出:堆输出:堆A1.nA1.n1.
24、1.for for i i2 to n2 to n2.2.ShiftUp(A,ShiftUp(A,i i)3.3.end forend for第二十一张,PPT共四十九页,创作于2022年6月214.15 4.15 给出一个整数数组给出一个整数数组A1.nA1.n,可按照下面的方法建立一个,可按照下面的方法建立一个A A的堆的堆B1.nB1.n。从空堆开始,反复将。从空堆开始,反复将A A中元素插入中元素插入B B,每一次调整,每一次调整当时的堆,直到当时的堆,直到B B包含包含A A中的所有元素。证明在最坏情况下,中的所有元素。证明在最坏情况下,算法运行时间是算法运行时间是(nlogn)(n
25、logn)。解:解:1.1.for for i i1 to n1 to n2.2.BBi iAAi i 3.3.ShiftUp(B,ShiftUp(B,i i)/ShiftUp(B1./ShiftUp(B1.i i,i i)4.4.end forend for在最坏情况下在最坏情况下 第二十二张,PPT共四十九页,创作于2022年6月224.16 4.16 用用图说图说明明练习练习4.154.15的算法的算法对对于下面数于下面数组组的运算。的运算。解:解:A1.8 A1.8 6 6 9 9 2 2 7 7 1 1 8 8 4 4 3 3B1.1=B1.1=6 66 6 9 99 9 6 69
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 相交 数据结构
限制150内