堆和不相交数据结构.ppt
《堆和不相交数据结构.ppt》由会员分享,可在线阅读,更多相关《堆和不相交数据结构.ppt(49页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、堆和不相交数据结构现在学习的是第1页,共49页二叉树性质二叉树性质二叉树性质二叉树性质 (Page 71)(Page 71)性质性质1:在二叉树中,第:在二叉树中,第:在二叉树中,第:在二叉树中,第j j层的顶点数最多是层的顶点数最多是2j j。性质性质2:令二叉树:令二叉树T顶点数是顶点数是n,高度是,高度是,高度是,高度是k k,那么,那么,那么,那么如果如果T是完全的,等号成立。如果是完全的,等号成立。如果T是几乎完全的,那么是几乎完全的,那么是几乎完全的,那么是几乎完全的,那么性质性质3 3:有:有:有:有n个顶点的完全或几乎完全的二叉树的高度是个顶点的完全或几乎完全的二叉树的高度是个
2、顶点的完全或几乎完全的二叉树的高度是个顶点的完全或几乎完全的二叉树的高度是性质性质4 4:对任何一棵二叉树:对任何一棵二叉树T T,如果其终端结点数为如果其终端结点数为n0n0,度为度为2 2的的结点数为结点数为n2n2,则则n0=n2+1n0=n2+12现在学习的是第2页,共49页性质:对任何一棵二叉树性质:对任何一棵二叉树T T,如果其终端结点数为如果其终端结点数为n0n0,度为度为2 2的结点数为的结点数为n2n2,则则n0=n2+1n0=n2+1证明:证明:n1为二叉树为二叉树T中度为中度为1的结点数的结点数 因为:二叉树中所有结点的度均小于或等于因为:二叉树中所有结点的度均小于或等于
3、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现在学习的是第3页,共49页性质性质5:如果对一棵有:如果对一棵有:如果对一棵有:如果对一棵有n n个结点的完全二叉树的结点按层序编个结点的完全二叉树的结点按层序编号,则对任一结点号,则对任一结点i(1 i n),有:,有:(1)(
4、1)如果如果如果如果i=1,则结点,则结点,则结点,则结点i是二叉树的根,无双亲;如果是二叉树的根,无双亲;如果是二叉树的根,无双亲;如果是二叉树的根,无双亲;如果i1,则,则,则,则其双亲是其双亲是其双亲是其双亲是 i/2 (2)(2)如果如果如果如果2in,则结点,则结点,则结点,则结点i i无左孩子;如果无左孩子;如果无左孩子;如果无左孩子;如果2i n,则其左孩子是,则其左孩子是2i (3)如果如果2i+1n2i+1n,则结点,则结点,则结点,则结点i i无右孩子;如果无右孩子;如果无右孩子;如果无右孩子;如果2i+1 n,则其右,则其右孩子是孩子是2i+14现在学习的是第4页,共49
5、页4.1 引言(堆、不相交集)引言(堆、不相交集)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算法的分析(略)算法的分析(略)5现在学习的是第5页,共49页4.2 堆堆堆的引入堆的引入在许多算法中,需要支持下面二种运算:在许多算法中,需要支持下面二种运算:在许多算法中,需要支持下面二种运算:在许多算法中,需要支持下面二
6、种运算:u插入元素插入元素u寻找最大值元素(或最小值元素)寻找最大值元素(或最小值元素)支持这二种运算的数据结构称为优先队列。支持这二种运算的数据结构称为优先队列。可采用下述三种方法实现优先队列:可采用下述三种方法实现优先队列:使用普通队列(或数组),插入容易(尾部),但使用普通队列(或数组),插入容易(尾部),但寻找最大值需搜索整个队列,开销比较大。寻找最大值需搜索整个队列,开销比较大。使用排序数组,寻找最大值元素容易,插入操作需移动使用排序数组,寻找最大值元素容易,插入操作需移动使用排序数组,寻找最大值元素容易,插入操作需移动使用排序数组,寻找最大值元素容易,插入操作需移动很多元素。很多元
7、素。很多元素。很多元素。使用堆,寻找最大值元素容易,插入操作仅需移动少量使用堆,寻找最大值元素容易,插入操作仅需移动少量使用堆,寻找最大值元素容易,插入操作仅需移动少量使用堆,寻找最大值元素容易,插入操作仅需移动少量元素。元素。元素。元素。6现在学习的是第6页,共49页定义定义4.1(Page 74)一个(二叉)堆是一棵几乎完全的二叉树,它的一个(二叉)堆是一棵几乎完全的二叉树,它的每个结点都满足堆的特性:设每个结点都满足堆的特性:设v是一个结点,是一个结点,p(v)是是v的父结点,那么存储在的父结点,那么存储在p(v)中的数据项键值大于或中的数据项键值大于或等于存储在等于存储在v中的数据项键
8、值。中的数据项键值。堆的定义(二叉堆)堆的定义(二叉堆)几乎完全二叉树(几乎完全二叉树(几乎完全二叉树(几乎完全二叉树(Page 71Page 71)如果一棵二叉树,除了如果一棵二叉树,除了如果一棵二叉树,除了如果一棵二叉树,除了最右边最右边最右边最右边位置位置位置位置上的一个或几个上的一个或几个上的一个或几个上的一个或几个叶子叶子叶子叶子可能缺少外,它可能缺少外,它可能缺少外,它可能缺少外,它是丰满的,我们定义它为几乎完全二是丰满的,我们定义它为几乎完全二是丰满的,我们定义它为几乎完全二是丰满的,我们定义它为几乎完全二叉树。叉树。叉树。叉树。几乎完全二叉树例几乎完全二叉树例几乎完全二叉树例几
9、乎完全二叉树例7现在学习的是第7页,共49页堆数据结构支持下列运算堆数据结构支持下列运算uDeleteMax(H):从一个非空堆:从一个非空堆H中,删除最大键中,删除最大键值的数据项,并返回该数据;值的数据项,并返回该数据;uInsert(H,x):将数据项:将数据项x插入堆插入堆H中;中;uDelete(H,i):从堆中删除第:从堆中删除第i项;项;uMakeHeap(A):将数组转换为堆。:将数组转换为堆。堆的蕴含特性:堆的蕴含特性:沿着每条从根到叶子的路径,元素的键值以降序沿着每条从根到叶子的路径,元素的键值以降序(或称非升序)排列。(或称非升序)排列。8现在学习的是第8页,共49页堆的
10、表示堆的表示 有有n个结点堆个结点堆T,可以用一个数组,可以用一个数组H1.nH1.n用下面方式来表用下面方式来表示:示:uT的根结点存储在的根结点存储在的根结点存储在的根结点存储在H1中;中;中;中;uu设设设设T T的结点存储在的结点存储在的结点存储在的结点存储在HHj 中,如果它有左子结点,则这个中,如果它有左子结点,则这个左子结点存储在左子结点存储在H2H2j中。如果它还有右子结点,这个右中。如果它还有右子结点,这个右子结点存储在子结点存储在H2H2j+1;u若元素若元素Hj 不是根结点,它的父结点存储在不是根结点,它的父结点存储在H j/2/2 中。中。由由由由“几乎完全二叉树几乎完
11、全二叉树几乎完全二叉树几乎完全二叉树”的定义可知,如果堆中某结点有右子的定义可知,如果堆中某结点有右子的定义可知,如果堆中某结点有右子的定义可知,如果堆中某结点有右子结点,则它一定也有左子结点。结点,则它一定也有左子结点。结点,则它一定也有左子结点。结点,则它一定也有左子结点。堆具有如下性质:堆具有如下性质:堆具有如下性质:堆具有如下性质:key(Hkey(H j/2 )key(Hj)2 j jnn9现在学习的是第9页,共49页2011729310411546573879510堆和它的数组表示法堆和它的数组表示法 把存储在堆中的数据项视为键值。按树的结点把存储在堆中的数据项视为键值。按树的结点
12、把存储在堆中的数据项视为键值。按树的结点把存储在堆中的数据项视为键值。按树的结点“自顶向下自顶向下自顶向下自顶向下”、“从左至右从左至右从左至右从左至右”、“按按按按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 91010H2=17H2=17的的的的左子结点左子结点左子结点
13、左子结点为为为为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 沿着每条从根到叶子的沿着每条从根到叶子的路径,元素的键值以降序路径,元素的键值以降序排列。排列。10现在学习的是第10页,共49页4.2.1 堆上的运算堆上的运算ShiftUp 假定对于某个假定对于某个假定对于某个假定对于某个i1,Hi的键值变成大于它父结点的键值,的键值变成大于它父结点的键值,这样违反了堆的特性,需使用称
14、为这样违反了堆的特性,需使用称为ShiftUpShiftUp的运算来修复堆。的运算来修复堆。的运算来修复堆。的运算来修复堆。ShiftUp运算沿着从运算沿着从HHi i 到根结点的惟一路径,把到根结点的惟一路径,把Hi移到移到适合它的位置上。在移动的每一步中,将适合它的位置上。在移动的每一步中,将HiHi的键值与它的的键值与它的父结点父结点H i i/2/2 的键值相比较,若的键值相比较,若uu若若若若HiHiH i i/2 ,则则则则HiHi和和H i/2/2 互换(上移),继续互换(上移),继续互换(上移),继续互换(上移),继续。uu若若若若HiHHiH i/2/2 或或 i1,终止。,
15、终止。,终止。,终止。11现在学习的是第11页,共49页H5=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=20
16、H1=20,互换。互换后,互换。互换后,互换。互换后,互换。互换后H2=20H2=20、H1=25H1=25;2 25 52 20 09 91 10 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 1201171729104 411115 55101045 537H1=25H1=25位于根结点。此时位于根结点。此时位于根结点。此时位于根结点。此时i=1i=1,程序终止。,程序终止。,程序终止。,程序终止。251012
17、现在学习的是第12页,共49页过程过程 ShiftUp(参见参见Page 75)输入:数组输入:数组H1.n和索引和索引i(1in)输出:上移输出:上移Hi(如果需要如果需要),使它不大于父结点。,使它不大于父结点。1.1.donefalsedonefalse2.if i1 then exit/根结点根结点3.3.repeatrepeat4.if key(Hi i)key(H i i/2)then 5.互换互换HHi i 和和和和HH i i/2/2 6.else 7.donetrue8.8.end if end if9.i i i/2 10.10.until(until(i=1)or don
18、e 13现在学习的是第13页,共49页ShiftDown 假定对于某个假定对于某个假定对于某个假定对于某个i i n/2n/2 (非叶结点)(非叶结点)(非叶结点)(非叶结点),HHi i 的键值变成小于它的左右子的键值变成小于它的左右子的键值变成小于它的左右子的键值变成小于它的左右子结点结点结点结点H2H2i i 或或或或H2H2i i+1+1 的键值,这样违反了堆的特性,需使用称为的键值,这样违反了堆的特性,需使用称为的键值,这样违反了堆的特性,需使用称为的键值,这样违反了堆的特性,需使用称为ShiftDownShiftDown的运算来修复堆。的运算来修复堆。的运算来修复堆。的运算来修复堆
19、。ShiftDown ShiftDown运算使运算使运算使运算使HHi i 下移到二叉树中适合它的位置上。在下移的每一下移到二叉树中适合它的位置上。在下移的每一下移到二叉树中适合它的位置上。在下移的每一下移到二叉树中适合它的位置上。在下移的每一步中,将步中,将步中,将步中,将HHi i 的键值与它的子结点键值相比较,若的键值与它的子结点键值相比较,若的键值与它的子结点键值相比较,若的键值与它的子结点键值相比较,若uuHHi i 子结点键值子结点键值子结点键值子结点键值,则则则则HHi i 与子结点键值中较大者交换(下移),与子结点键值中较大者交换(下移),与子结点键值中较大者交换(下移),与子
20、结点键值中较大者交换(下移),继续;继续;继续;继续;uuHHi i子结点键值子结点键值子结点键值子结点键值 或或或或 i i n/2n/2 ,终止。,终止。,终止。,终止。说明:说明:说明:说明:HHi i 应与它的子结点中键值较大者交换,被交换者将成为原堆中另一应与它的子结点中键值较大者交换,被交换者将成为原堆中另一应与它的子结点中键值较大者交换,被交换者将成为原堆中另一应与它的子结点中键值较大者交换,被交换者将成为原堆中另一个键值较小的子结点的父结点(如果有的话)。个键值较小的子结点的父结点(如果有的话)。个键值较小的子结点的父结点(如果有的话)。个键值较小的子结点的父结点(如果有的话)
21、。171710101111111110103 33 314现在学习的是第14页,共49页说明:若说明:若说明:若说明:若i i n/2n/2 ,则该结点位于叶子的位置,无需下移。,则该结点位于叶子的位置,无需下移。,则该结点位于叶子的位置,无需下移。,则该结点位于叶子的位置,无需下移。n/2n/2 =1515/2/2 =7=7 n/2n/2 =1010/2/2 =5=515现在学习的是第15页,共49页H2键值由键值由键值由键值由1717变为变为变为变为32 20 03 39 91 10 01 11 14 45 53 37 75 51 12 23 34 45 56 67 78 89 91010
22、2 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互换。交换后互换。交换后互换。交换后互换。交换后H5=5H5=5,H10=3H10=3;H10=3H10=3位于叶结点位置。位于叶结点位置。位于叶结点位置。位于叶结点位置。i=10i=10 n/2n/2 =5=5,程序终止。,程序终止。,程序终止。,程序终止。H2=3H2=3小于小于小于小于H4H4和和和和H5H5,因为,因为,因为,因为
23、H4H5H4H5,所以,所以,所以,所以H2H2和和和和H5H5互换。交换后互换。交换后互换。交换后互换。交换后H2=11H2=11,H5=3H5=3;20201 1172 293 3104 411115 545 537 753 32 216现在学习的是第16页,共49页过程过程过程过程 ShiftDown(Page 76)输入:数组输入:数组输入:数组输入:数组H1.nH1.n和索引和索引和索引和索引i i(11in)输出:下移输出:下移HHi(如果需要),使它不小于子结点。(如果需要),使它不小于子结点。(如果需要),使它不小于子结点。(如果需要),使它不小于子结点。1.1.donefal
24、sedonefalse2.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 /若有右子结点,选择子结点较大者。若有右子结点,选择子结点较大者。若有右子结点,选择子结点较大者。若有右子结点,选择子结点较大者。
25、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 17现在学习的是第17页,共49页插入插入 为了把元素为了把元素为了把元素为了把元素x插入堆插入堆插入堆插入堆H中,先将堆的大小增中,先将堆的大小增1,然后元素,然后元素x x添添加到加到HH的末尾,再根据需要将的末尾,再根据需要将x x上移,直到满足堆的特性。上移,直到满足堆的特性。若新堆的个数为若新堆的个数为n,那么堆树的高度为那么堆树的高度为那么堆树的高度为那么堆树的高度为 log2n 所以将一个元素插入大小为所以将一个元素插入大小为所以将一
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 相交 数据结构
限制150内