堆和不相交数据结构精选PPT.ppt
《堆和不相交数据结构精选PPT.ppt》由会员分享,可在线阅读,更多相关《堆和不相交数据结构精选PPT.ppt(49页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、堆和不相交数据结构第1页,讲稿共49张,创作于星期日二叉树性质二叉树性质二叉树性质二叉树性质 (Page 71)(Page 71)性质性质性质性质1 1:在二叉树中,第:在二叉树中,第:在二叉树中,第:在二叉树中,第j j层的顶点数最多是层的顶点数最多是层的顶点数最多是层的顶点数最多是2 2j j。性质性质性质性质2 2:令二叉树:令二叉树:令二叉树:令二叉树T T顶点数是顶点数是顶点数是顶点数是n n,高度是,高度是,高度是,高度是k k,那么,那么,那么,那么如果如果如果如果T T是完全的,等号成立。如果是完全的,等号成立。如果是完全的,等号成立。如果是完全的,等号成立。如果T T是几乎完
2、全的,那么是几乎完全的,那么是几乎完全的,那么是几乎完全的,那么性质性质性质性质3 3:有:有:有:有n n个顶点的完全或几乎完全的二叉树的高度是个顶点的完全或几乎完全的二叉树的高度是个顶点的完全或几乎完全的二叉树的高度是个顶点的完全或几乎完全的二叉树的高度是性质性质4 4:对任何一棵二叉树:对任何一棵二叉树T T,如果其终端结点数为如果其终端结点数为n0n0,度为度为2 2的结点数为的结点数为n2n2,则则n0=n2+1n0=n2+12第2页,讲稿共49张,创作于星期日性质:对任何一棵二叉树性质:对任何一棵二叉树T T,如果其终端结点数为如果其终端结点数为n0n0,度为度为2 2的的结点数为
3、结点数为n2n2,则则n0=n2+1n0=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第3页,讲稿共49张,创作于星期日性质性
4、质性质性质5 5:如果对一棵有:如果对一棵有:如果对一棵有:如果对一棵有n n个结点的完全二叉树的结点按层序个结点的完全二叉树的结点按层序个结点的完全二叉树的结点按层序个结点的完全二叉树的结点按层序编号,则对任一结点编号,则对任一结点编号,则对任一结点编号,则对任一结点i(1 i n),有:,有:,有:,有:(1)(1)如果如果如果如果i=1i=1,则结点,则结点,则结点,则结点i i是二叉树的根,无双亲;如果是二叉树的根,无双亲;如果是二叉树的根,无双亲;如果是二叉树的根,无双亲;如果i1i1,则,则,则,则其双亲是其双亲是其双亲是其双亲是 i/2 (2)(2)如果如果如果如果2in2in,
5、则结点,则结点,则结点,则结点i i无左孩子;如果无左孩子;如果无左孩子;如果无左孩子;如果2i n,则其左孩子,则其左孩子,则其左孩子,则其左孩子是是是是2i2i (3)(3)如果如果如果如果2i+1n2i+1n,则结点,则结点,则结点,则结点i i无右孩子;如果无右孩子;如果无右孩子;如果无右孩子;如果2i+1 n,则其右,则其右,则其右,则其右孩子是孩子是孩子是孩子是2i+12i+14第4页,讲稿共49张,创作于星期日4.1 引言(堆、不相交集)引言(堆、不相交集)4.2 堆堆 4.2.1 堆上的运算堆上的运算 4.2.2 创建堆创建堆 4.2.3 堆排序堆排序 4.2.4 最大堆和最小
6、堆最大堆和最小堆4.3 不相交集数据结构不相交集数据结构 4.3.1 按秩合并措施按秩合并措施 4.3.3 Union-Find算法算法 4.3.2 路径压缩路径压缩 4.3.4 Union-Find算法的分析(略)算法的分析(略)5第5页,讲稿共49张,创作于星期日4.2 堆堆堆的引入堆的引入在许多算法中,需要支持下面二种运算:在许多算法中,需要支持下面二种运算:在许多算法中,需要支持下面二种运算:在许多算法中,需要支持下面二种运算:u插入元素插入元素u寻找最大值元素(或最小值元素)寻找最大值元素(或最小值元素)支持这二种运算的数据结构称为优先队列。支持这二种运算的数据结构称为优先队列。支持
7、这二种运算的数据结构称为优先队列。支持这二种运算的数据结构称为优先队列。可采用下述三种方法实现优先队列:可采用下述三种方法实现优先队列:可采用下述三种方法实现优先队列:可采用下述三种方法实现优先队列:使用普通队列(或数组),插入容易(尾部),但使用普通队列(或数组),插入容易(尾部),但使用普通队列(或数组),插入容易(尾部),但使用普通队列(或数组),插入容易(尾部),但寻找最大值需搜索整个队列,开销比较大。寻找最大值需搜索整个队列,开销比较大。寻找最大值需搜索整个队列,开销比较大。寻找最大值需搜索整个队列,开销比较大。使用排序数组,寻找最大值元素容易,插入操作需使用排序数组,寻找最大值元素
8、容易,插入操作需使用排序数组,寻找最大值元素容易,插入操作需使用排序数组,寻找最大值元素容易,插入操作需移动很多元素。移动很多元素。移动很多元素。移动很多元素。使用堆,寻找最大值元素容易,插入操作仅需移动使用堆,寻找最大值元素容易,插入操作仅需移动使用堆,寻找最大值元素容易,插入操作仅需移动使用堆,寻找最大值元素容易,插入操作仅需移动少量元素。少量元素。少量元素。少量元素。6第6页,讲稿共49张,创作于星期日定义定义4.1(Page 74)一个(二叉)堆是一棵几乎完全的二叉树,它的每个一个(二叉)堆是一棵几乎完全的二叉树,它的每个结点都满足堆的特性:设结点都满足堆的特性:设v是一个结点,是一个
9、结点,p(v)是是v的父的父结点,那么存储在结点,那么存储在p(v)中的数据项键值大于或等于存中的数据项键值大于或等于存储在储在v中的数据项键值。中的数据项键值。堆的定义(二叉堆)堆的定义(二叉堆)几乎完全二叉树(几乎完全二叉树(几乎完全二叉树(几乎完全二叉树(Page 71Page 71)如果一棵二叉树,除了如果一棵二叉树,除了如果一棵二叉树,除了如果一棵二叉树,除了最右边最右边最右边最右边位位位位置上的一个或几个置上的一个或几个置上的一个或几个置上的一个或几个叶子叶子叶子叶子可能缺少外,可能缺少外,可能缺少外,可能缺少外,它是丰满的,我们定义它为几乎完全它是丰满的,我们定义它为几乎完全它是
10、丰满的,我们定义它为几乎完全它是丰满的,我们定义它为几乎完全二叉树。二叉树。二叉树。二叉树。几乎完全二叉树例几乎完全二叉树例几乎完全二叉树例几乎完全二叉树例7第7页,讲稿共49张,创作于星期日堆数据结构支持下列运算堆数据结构支持下列运算uDeleteMax(H):从一个非空堆:从一个非空堆H中,删除最大中,删除最大键值的数据项,并返回该数据;键值的数据项,并返回该数据;uInsert(H,x):将数据项:将数据项x插入堆插入堆H中;中;uDelete(H,i):从堆中删除第:从堆中删除第i项;项;uMakeHeap(A):将数组转换为堆。:将数组转换为堆。堆的蕴含特性:堆的蕴含特性:沿着每条从
11、根到叶子的路径,元素的键值以降序沿着每条从根到叶子的路径,元素的键值以降序(或称非升序)排列。(或称非升序)排列。8第8页,讲稿共49张,创作于星期日堆的表示堆的表示 有有有有n n个结点堆个结点堆个结点堆个结点堆T T,可以用一个数组,可以用一个数组,可以用一个数组,可以用一个数组H1.nH1.n用下面方式来表示:用下面方式来表示:用下面方式来表示:用下面方式来表示:uuT T的根结点存储在的根结点存储在的根结点存储在的根结点存储在H1H1中;中;中;中;uu设设设设T T的结点存储在的结点存储在的结点存储在的结点存储在HHj j 中,如果它有左子结点,则这个中,如果它有左子结点,则这个中,
12、如果它有左子结点,则这个中,如果它有左子结点,则这个左子结点存储在左子结点存储在左子结点存储在左子结点存储在H2H2j j 中。如果它还有右子结点,这个右子中。如果它还有右子结点,这个右子中。如果它还有右子结点,这个右子中。如果它还有右子结点,这个右子结点存储在结点存储在结点存储在结点存储在H2H2j j+1+1;uu若元素若元素若元素若元素HHj j 不是根结点,它的父结点存储在不是根结点,它的父结点存储在不是根结点,它的父结点存储在不是根结点,它的父结点存储在HH j j/2/2 中。中。中。中。由由由由“几乎完全二叉树几乎完全二叉树几乎完全二叉树几乎完全二叉树”的定义可知,如果堆中某结点
13、有右子的定义可知,如果堆中某结点有右子的定义可知,如果堆中某结点有右子的定义可知,如果堆中某结点有右子结点,则它一定也有左子结点。结点,则它一定也有左子结点。结点,则它一定也有左子结点。结点,则它一定也有左子结点。堆具有如下性质:堆具有如下性质:堆具有如下性质:堆具有如下性质:key(Hkey(H j j/2/2 )key(H)key(Hj j)2 2 j jnn9第9页,讲稿共49张,创作于星期日2011729310411546573879510堆和它的数组表示法堆和它的数组表示法堆和它的数组表示法堆和它的数组表示法 把存储在堆中的数据项视为键值。按树的结点把存储在堆中的数据项视为键值。按树
14、的结点把存储在堆中的数据项视为键值。按树的结点把存储在堆中的数据项视为键值。按树的结点“自顶向下自顶向下自顶向下自顶向下”、“从左至右从左至右从左至右从左至右”、“按按按按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的的的的左子结点左子结点左
15、子结点左子结点为为为为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 假定对于某个假定对于某个假定对于某个假定对于某个i i1 1,HHi i 的键值变成大于它父结点的键值,的键值变成大于它父结点的键值,
16、的键值变成大于它父结点的键值,的键值变成大于它父结点的键值,这样违反了堆的特性,需使用称为这样违反了堆的特性,需使用称为这样违反了堆的特性,需使用称为这样违反了堆的特性,需使用称为ShiftUpShiftUp的运算来修复堆。的运算来修复堆。的运算来修复堆。的运算来修复堆。ShiftUpShiftUp运算沿着从运算沿着从运算沿着从运算沿着从HHi i 到根结点的惟一路径,把到根结点的惟一路径,把到根结点的惟一路径,把到根结点的惟一路径,把HHi i 移到适移到适移到适移到适合它的位置上。在移动的每一步中,将合它的位置上。在移动的每一步中,将合它的位置上。在移动的每一步中,将合它的位置上。在移动的
17、每一步中,将HiHi的键值与它的父结的键值与它的父结的键值与它的父结的键值与它的父结点点点点HH i i/2/2 的键值相比较,若的键值相比较,若的键值相比较,若的键值相比较,若uu若若若若HiHiHH i i/2/2 ,则则则则HiHi和和和和HH i i/2/2 互换(上移),继续互换(上移),继续互换(上移),继续互换(上移),继续。u若若若若HiHHiH i i/2/2 或或或或 i i1 1,终止。,终止。,终止。,终止。11第11页,讲稿共49张,创作于星期日H5=25H5=25H2=17H2=17,互换。互换后,互换。互换后,互换。互换后,互换。互换后H5=17H5=17、H2=
18、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 01 17 74 45 53
19、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,程序终止。,程序终止。,程序终止。,程序终止。2525101012第12页,讲稿共49张,创作于星期日过程过程 ShiftUp(参见参见Page 75)输入:数组输入:数组H1.n和索引和索引i(1in
20、)输出:上移输出:上移Hi(如果需要如果需要),使它不大于父结点。,使它不大于父结点。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(unti
21、l(i i=1)or done=1)or done 13第13页,讲稿共49张,创作于星期日ShiftDown 假定对于某个假定对于某个假定对于某个假定对于某个i i n/2n/2 (非叶结点)(非叶结点)(非叶结点)(非叶结点),HHi i 的键值变成小于它的左右的键值变成小于它的左右的键值变成小于它的左右的键值变成小于它的左右子结点子结点子结点子结点H2H2i i 或或或或H2H2i i+1+1 的键值,这样违反了堆的特性,需使用称为的键值,这样违反了堆的特性,需使用称为的键值,这样违反了堆的特性,需使用称为的键值,这样违反了堆的特性,需使用称为ShiftDownShiftDown的运算来
22、修复堆。的运算来修复堆。的运算来修复堆。的运算来修复堆。ShiftDown ShiftDown运算使运算使运算使运算使HHi i 下移到二叉树中适合它的位置上。在下移的每下移到二叉树中适合它的位置上。在下移的每下移到二叉树中适合它的位置上。在下移的每下移到二叉树中适合它的位置上。在下移的每一步中,将一步中,将一步中,将一步中,将HHi i 的键值与它的子结点键值相比较,若的键值与它的子结点键值相比较,若的键值与它的子结点键值相比较,若的键值与它的子结点键值相比较,若uuHHi i 子结点键值子结点键值子结点键值子结点键值,则则则则HHi i 与子结点键值中较大者交换(下移),与子结点键值中较大
23、者交换(下移),与子结点键值中较大者交换(下移),与子结点键值中较大者交换(下移),继续;继续;继续;继续;uuHHi i子结点键值子结点键值子结点键值子结点键值 或或或或 i i n/2n/2 ,终止。,终止。,终止。,终止。说明:说明:说明:说明:HHi i 应与它的子结点中键值较大者交换,被交换者将成为原堆中另一个应与它的子结点中键值较大者交换,被交换者将成为原堆中另一个应与它的子结点中键值较大者交换,被交换者将成为原堆中另一个应与它的子结点中键值较大者交换,被交换者将成为原堆中另一个键值较小的子结点的父结点(如果有的话)。键值较小的子结点的父结点(如果有的话)。键值较小的子结点的父结点
24、(如果有的话)。键值较小的子结点的父结点(如果有的话)。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张,创作于星期日H2H2键值由键值由键值由键值由1717变为变为变为变为3 32 20 03 39 91 10 01 11 14 45 53 3
25、7 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互换。交换后互换。交换后互换。交换后互换。交换后H5=5H5=5,H10=3H10=3;H10=3H10=3位于叶结点位置。位于叶结点位置。位于叶结点位置。位于叶结点位置。i=10i=10 n/2n/2 =5=5,程序终止。,程序终止。,程序终止。,程序终止。H2=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 相交 数据结构 精选 PPT
限制150内