最小生成树PPT课件.ppt
《最小生成树PPT课件.ppt》由会员分享,可在线阅读,更多相关《最小生成树PPT课件.ppt(31页珍藏版)》请在三一文库上搜索。
1、数据结构Data Structure第十第十三三章章 最小生成树最小生成树第第13章章 最小生成树最小生成树n生成树与最小生成树生成树与最小生成树nKruskal算法算法nPrim算法算法n算法的正确性算法的正确性生成树生成树n生成树是无向连通图的极小连通子图。包含图的所有 n 个结点,但只含图的 n-1 条边。在生成树中添加一条边之后,必定会形成回路或环。ABCDEHMABCDEHM无向图G 无向图G的生成树 最小生成树最小生成树(Minimum spanning tree,MST)n定义定义:加权无向图的所有生成树中边的权值(代价)之和最小的树。1243566165556342124356
2、15342最小代价生成树Application:Network designApplicationsnMST is fundamental problem with diverse applications.nDithering.nCluster analysis.nMax bottleneck paths.nReal-time face verification.nLDPC codes for error correction.nImage registration with Renyi entropy.nFind road networks in satellite and aerial
3、imagery.nReducing data storage in sequencing amino acids in a protein.nModel locality of particle interactions in turbulent fluid flows.nAutoconfig protocol for Ethernet bridging to avoid cycles in a network.nApproximation algorithms for NP-hard problems(e.g.,TSP,Steiner tree).nNetwork design(commun
4、ication,electrical,hydraulic,computer,road).http:/www.ics.uci.edu/eppstein/gina/mst.html第第13章章 最小生成树最小生成树n生成树与最小生成树生成树与最小生成树nKruskal算法算法nPrim算法算法n算法的正确性算法的正确性Kruscal 算法算法n基本思想:考虑图中权值最小的边。如果加入这条边不会导致回路,则加入;否则考虑下一条边,直到包含了所有的顶点n实现:n初始时,设置生成树为(V,),如果V有n个顶点,则初始的生成树为具有n个连通分量的树。n按权值的大小逐个考虑所有的边,如果该边的加入能连接两个
5、连通分量,则加入。当生成树只有一个连通分量时,算法结束。12435661655563421、初始连通分量:1,2,3,4,5,62、反复执行添加、放弃动作。边 动作 连通分量 (1,3)添加1,3,4,5,6,2 (4,6)添加1,3,4,6,2,5 (2,5)添加1,3,4,6,2,5 (3,6)添加1,3,4,6,2,5 (1,4)放弃因构成回路 (3,4)放弃因构成回路 (2,3)添加1,3,4,5,6,2最小代价生成树12435615342算法难点及解决方案算法难点及解决方案n如何从所有边中选择代价最小的边:n用一个优先级队列来实现。将所有的边放入一个优先级队列,边的优先级就是它的权值
6、权值越小,优先级越高。n如何判断加入一条边后会不会形成回路:n用并查集来实现。将一个连通分量表示为并查集中的一个子集,检查一条边加入后会不会形成回路可以通过对边的两个端点分别执行Find操作。如果两个Find的结果相同,则表示两个端点已连通,加入这条边会形成回路,否则将这条边加入生成树。添加边的操作就是一个Union操作,将两个端点所属的子集归并起来,表示其中的所有顶点都已连通。定义优先级队列中的元素类型定义优先级队列中的元素类型struct edge int beg,end;/边的起点、终点和权值TypeOfEdge w;bool operator(const edge&rp)constr
7、eturn w rp.w;/重载小于运算符;kruskal算法的算法的实现template void adjListGraph:kruskal()const int edgesAccepted=0,u,v;edgeNode*p;edge e;DisjointSet ds(Vers);/定义一个并查集 priorityQueue pq;/定义一个关于边的优先级队列 /将所有的边放入优先级队列 for(int i=0;inext)if(i end)/每条边只入队一次 e.beg=i;e.end=p-end;e.w=p-weight;pq.enQueue(e);/开始归并 while(edgesAc
8、cepted Vers-1)/选择边数不满n-1时 e=pq.deQueue();/取出权值最小的边 u=ds.Find(e.beg);v=ds.Find(e.end);if(u!=v)/边的起点和终点在不同的连通子图 edgesAccepted+;ds.Union(u,v);/加入(u,v)归并两个连通子图 cout (verListe.beg.ver ,verListe.end.ver )t;时间复杂度时间复杂度n生成优先级队列的for循环将所有的边入队。需要执行|E|次入队,建堆时间为log|E|,生成优先级队列所需时间是O(|E|log|E|)。n在最坏的情况下,归并的循环可能需要检查
9、所有的边。对于每条边,最多需要执行两次Find操作和一次Union操作。因此,归并循环的最坏情况的时间复杂度是O(|E|log|V|)。n在一个连通图中,一般边数总比结点数大,所以,Kruskal算法的时间复杂度是O(E|log|E|)。第第13章章 最小生成树最小生成树n生成树与最小生成树生成树与最小生成树nKruskal算法算法nPrim算法算法n算法的正确性算法的正确性Prim算法算法n从顶点的角度出发。初始时,顶点集U为空,然后逐个加入顶点,直到包含所有顶点。n过程:首先选择一个顶点,加入顶点集。然后重复下列工作,直到U=Vn选择连接U 和V-U 中代价最小的边(u,v)n把(u,v)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最小 生成 PPT 课件
