数据结构第18讲_最小生成树与拓扑排序.ppt
《数据结构第18讲_最小生成树与拓扑排序.ppt》由会员分享,可在线阅读,更多相关《数据结构第18讲_最小生成树与拓扑排序.ppt(36页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第7 7章章 图图7.1 7.1 图的定义和术语图的定义和术语7.2 7.2 图的存储结构图的存储结构7.3 7.3 图的遍历图的遍历7.4 7.4 图的连通性问题图的连通性问题7.5 7.5 有向无环图及其应用有向无环图及其应用7.6 7.6 最短路径最短路径7.4 7.4 图的连通性问题图的连通性问题1 1)无向图的无向图的连通分量和连通分量和生成树生成树2 2)最小生成树最小生成树3 3)普里姆算法)普里姆算法4 4)克鲁斯卡尔算法)克鲁斯卡尔算法例:例:图及其生成树图及其生成树65665513420 对于带权的连通图对于带权的连通图(连通网连通网)G G,其生成树也是其生成树也是带权
2、的,将权最小的生成树称为带权的,将权最小的生成树称为最小生成树最小生成树。连通网最小生成树的意义?连通网最小生成树的意义?如何构造最小生成树?如何构造最小生成树?对于带权的连通图对于带权的连通图(连通网连通网)G G,其生成树也是其生成树也是带权的,将权最小的生成树称为带权的,将权最小的生成树称为最小生成树最小生成树。连通网最小生成树的意义?连通网最小生成树的意义?如何构造最小生成树?如何构造最小生成树?最小生成树的最小生成树的MSTMST性质:性质:假设假设 N=N=(V,EV,E)是一个连通网,)是一个连通网,U U是顶点是顶点集集 V V 的一个非空子集。若(的一个非空子集。若(u,vu
3、,v)是一条具有最)是一条具有最小权值(代价)的边,其中小权值(代价)的边,其中 u Uu U,vVvV-U-U,则,则必存在一棵包含边(必存在一棵包含边(u,vu,v)的最小生成树。)的最小生成树。656655134207.4 7.4 图的连通性问题图的连通性问题1 1)无向图的无向图的连通分量和连通分量和生成树生成树2 2)最小生成树最小生成树3 3)普里姆算法)普里姆算法4 4)克鲁斯卡尔算法)克鲁斯卡尔算法3.3.普里姆(普里姆(PrimPrim)算法)算法基本思想:基本思想:(1)(1)假设假设 G=(V,E)G=(V,E)是一个具有是一个具有 n n 个顶点的连通个顶点的连通网络,
4、网络,T=(UT=(U,TE)TE)是是 G G 的最小生成树,其中的最小生成树,其中 U U 是是 T T 的顶点集,的顶点集,TE TE 是是 T T 的边集,的边集,U U 和和 TE TE 的初值均为空;的初值均为空;(2)(2)从从 V V 中任取一个顶点(假定为中任取一个顶点(假定为 V V1 1),将此顶),将此顶点并入点并入 U U中,此时最小生成树顶点集中,此时最小生成树顶点集 U=VU=V1 1;(3)(3)从那些其中一个端点已在从那些其中一个端点已在 U U 中,另一端点仍中,另一端点仍在在 U U 外的所有边中,找一条最短(即权值最外的所有边中,找一条最短(即权值最小)
5、的边,设该边为小)的边,设该边为(V Vi i,V,Vj j),其中,其中 V Vi iUU,V Vj jVV-U-U,并把该边和顶点,并把该边和顶点 V Vj j分别并入分别并入 T T 的边的边集集 TE TE 和顶点集和顶点集 U U;(4)(4)如此进行下去,每次往生成树里并入一个顶点如此进行下去,每次往生成树里并入一个顶点和一条边,直到和一条边,直到 n-1 n-1 次后,把所有次后,把所有 n n 个顶点个顶点都并入生成树都并入生成树 T T 的顶点集的顶点集 U U 中,此时中,此时 U=VU=V,TETE中包含有(中包含有(n-1n-1)条边;这样,)条边;这样,T T 就是最
6、后就是最后得到的最小生成树。得到的最小生成树。实现该算法需附设一个辅助数组实现该算法需附设一个辅助数组closedgeclosedge,以记录从以记录从 U U 到到 V-U V-U 具有最小代价的边。对每个具有最小代价的边。对每个顶点顶点 v vi iVV-U-U,在辅助数组中存在一个相应分量,在辅助数组中存在一个相应分量closedgei-1(closedgei-1(下标从下标从0 0开始开始),它包括两个域。,它包括两个域。其中:其中:lowcostlowcost存储该边上的权。显然,存储该边上的权。显然,closedgei-1.lowcostclosedgei-1.lowcost =M
7、incost(uMincost(u,v vi i)|uU)|uU 即即v vi i到已生成子树的最短距离等于到到已生成子树的最短距离等于到U U中所有中所有顶点中的最小边的权值。顶点中的最小边的权值。vexvex域域存储该边依附的在存储该边依附的在U U中的顶点。中的顶点。例例:求下图:求下图最小生成树。最小生成树。假设开始顶点就选为顶点假设开始顶点就选为顶点1 1,故有故有U=1U=1,V-U=2V-U=2,3 3,4 4,5 5,66 (a)无向网无向网64V1V1V2V2V4V4V3V36213V5V55V6V6556(b)U=1 V-U=2,3,4,5,6(b)U=1 V-U=2,3,
8、4,5,61 12 23 34 45 56 66 65 51 15 53 31 12 24 45 56 61 14 45 56 6(c)U=1,3 V-U=2,4,5,6(c)U=1,3 V-U=2,4,5,63 31 1 2 24 45 56 6 4 42 21 15 5 6 6(d)U=1,3,6 V-(d)U=1,3,6 V-U=2,4,5U=2,4,53 31 12 24 45 56 64 42 21 15 56 6(e)U=1,3,6,4 V-U=2,5(e)U=1,3,6,4 V-U=2,5(f)U=1,3,6,4,2 V-U=5(f)U=1,3,6,4,2 V-U=51 12 2
9、4 43 35 56 64 42 21 15 53 3(g)U=1,3,6,4,2,5 V-U=54213124356(a)无向网无向网64V1V1V2V2V4V4V3V36213V5V55V6V6556基于邻接矩阵的普里姆算法基于邻接矩阵的普里姆算法 structstruct VertaxTypeVertaxType adjvexadjvex;/;/顶点编号顶点编号 VRTypeVRType lowcostlowcost;/=;/=Mincost(u,vMincost(u,vi i|u|uU U)closedgeMAX_VERTEX_NUMclosedgeMAX_VERTEX_NUM;Voi
10、d Void MiniSpanTree_PRIM(MGraphMiniSpanTree_PRIM(MGraph G,G,VertexTypeVertexType u)u)k=k=LocateVexLocateVex(G,u);(G,u);/顶点顶点u u为构造生成树的起始点为构造生成树的起始点,返回顶点返回顶点u u在图中的位置在图中的位置 for(j=0;jfor(j=0;jG.vexnumG.vexnum;+j);+j)/辅助数组初始化辅助数组初始化 if(j!=k)if(j!=k)closedgejclosedgej=u,=u,G.arcskj.adjG.arcskj.adj;close
11、dgek.lowcostclosedgek.lowcost=0;=0;/初始,初始,U Uuu边边k,j的权值的权值 for(i=1;ifor(i=1;iG.vexnumG.vexnum;+i);+i)/在其余顶点中选择在其余顶点中选择 k=k=minimum(closedgeminimum(closedge););/求出求出T T的下一结点的下一结点(k)(k)printf(closedgek.adjvexprintf(closedgek.adjvex,G.vexskG.vexsk););/输出生成树的边输出生成树的边 closedgek.lowcostclosedgek.lowcost=0
12、;=0;/第第k k顶点并入顶点并入U U集集 for(j=0;jfor(j=0;jG.vexnumG.vexnum;+j);+j)if(if(G.arcskj.adjG.arcskj.adj closedgej.lowcostclosedgej.lowcost)/新顶点并入新顶点并入U U后重新选择最小边后重新选择最小边 closedgejclosedgej=G.vexsk,G.arcskj.adjG.vexsk,G.arcskj.adj;/for/for /MiniSpanTree_PRIMMiniSpanTree_PRIMT(n)=O(nT(n)=O(n2 2)4.4.克鲁斯卡尔(克鲁斯
13、卡尔(KruskalKruskal)算法)算法基本思想基本思想 为使生成树上总的权值最小,应使每条边上为使生成树上总的权值最小,应使每条边上的权值尽可能小,自然应从权值最小的边选起,的权值尽可能小,自然应从权值最小的边选起,直至选出直至选出n-1n-1条权值最小的边为止,同时这条权值最小的边为止,同时这n-1n-1条条边必须不构成回路。因此,并非每一条当前权值边必须不构成回路。因此,并非每一条当前权值最小的边都可选。最小的边都可选。4.4.克鲁斯卡尔(克鲁斯卡尔(KruskalKruskal)算法)算法具体做法具体做法 先构造一个只含先构造一个只含 n n个顶点的森林,然后依权个顶点的森林,然
14、后依权值从小到大从连通网中选择边加入到森林中去,值从小到大从连通网中选择边加入到森林中去,并使森林中不产生回路,直至森林变成一棵树为并使森林中不产生回路,直至森林变成一棵树为止。止。例例:对下图中无向网,用克鲁斯卡尔算法求最小:对下图中无向网,用克鲁斯卡尔算法求最小生成树的过程。生成树的过程。2 22 21 15 56 61 13 34 4 无向网无向网64621355564 46 65 53 31 12 2345一般来讲:一般来讲:普里姆算法的时间复杂度为普里姆算法的时间复杂度为 O(nO(n2 2),适于稠,适于稠密图;密图;克鲁斯卡尔算法需对克鲁斯卡尔算法需对 e e 条边按权值进行排条
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 18 最小 生成 拓扑 排序
限制150内