- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Data Structures and Algorithms
design | analyze | experiment | implement;;最小生成树的概念
连通图
最小生成树
MST的性质
最小生成树的构造算法
Prim算法
Kruskal算法;最小生成树(Minimum Spanning Tree):在加权连通图(连通网)的所有生成树中,各边权值之和最小的生成树,称为最小生成树。要注意:
(1) 该定义是在无向连通图的基础上的;
(2) 最小生成树可能不唯一,但是其权值之和是唯一的;
(3) 对于n个结点的图,其生成树中必定有n-1条边;应用举例
上图代表6个城市间的交通网,边上的权表示公路的造价
现在要用公路把6个城市连接起来(这至少要修5条公路)
如何设计使得这5条公路的总造价最少呢?;(a);MST性质:假设G=(V,E)是一个加权连通图,U是顶点集V的一个非空子集。若(u,v)是一条具有最小权值的边,其中u∈U,v∈V-U,则必存在一棵包含边(u,v)的最小生成树。;MST性质可以用反证法证明如下:
假设图G的任何一棵最小生成树都不包含边(u,v),显然当把边(u,v)加入到G的一棵最小生成树T中时,由生成树的定义,将产生一个含有边(u,v)的回路;最小生成树边集的存储表示;mstEdge类型定义;;Prim算法;Prim算法构造一棵最小生成树的过程;Prim算法构造一棵最小生成树的过程;Prim算法构造一棵最小生成树的过程;作答;算法的关键是如何找到连接顶点集U和顶点集V-U的最小代价边。为实现这一目的,除了需要访问标志数组visited,用以区分顶点是否已经被访问过,还需要设置一个辅助数组D,用以记录从U到V-U具有最小代价的边。
对于每个vi ∈ V-U,在辅助数组D中存在一个分量D[i]与之对应,它包括两个域:
lowCost为U中的顶点到顶点vi的边上的最小权值;
adjVex表示U集合中编号为adjVex的顶点与编号为i的顶点(即vi)之间的边上的权值是lowCost。
;Prim算法--基于邻接表; for ( i= 1; i verNum; ++i) { // 选中一个点u入U集合后
for (p = verList[u].firstEdge; p != NULL; p = p-next) // 更新u关联的顶点的D值
if (!visited[p-to] D[p-to].lowCost p-weight) {
D[p-to].lowCost = p-weight; // 更新lowcost
D[p-to].adjVex = u; // 更新adjVex
}
minCost = noEdge;
for (j = 0; j verNum; ++j) // 在V-U中找lowCost最小顶点u
if (D[j].lowCost minCost) {
minCost = D[j].lowCost; u = j;
}
TE[count].vex1 = D[u].adjVex; // 保存最小生成树的一条边
TE[count].vex2 = u;
TE[count++].weight = D[u].lowCost;
D[u].lowCost = noEdge; // 顶点u已并入U集合
visited[u] = true;
}
delete [] D;
};时间性能;作答;;Kruskal算法;Kruskal算法;Kruskal算法构造一棵最小生成树的过程;作答;Kruskal算法;Kruskal算法--基于邻接表; while( count verNum- 1 ) { // 选出verNum-1条边
e = Q.deQueue(); // 从优先级队列出队一条边
int u = S.find(e.vex1); // 查找顶点vex1所属子集
int v = S.find(e.vex2); // 查找顶点vex2所属子集
if( u != v ) { // 边上的两个顶点不属于同一连通分量
S.merge( u, v ); //
您可能关注的文档
- 智慧供应链 课件 第1章 智慧供应链概述.pptx
- 智慧供应链 课件 第2章 智慧供应链的需求预测.pptx
- 第3章 智慧供应链的订单与排产.pptx
- 智慧供应链 课件 第5章 智慧供应链的智能制造.pptx
- 智慧供应链 课件 第6章 智慧供应链的智慧物流.pptx
- 智慧供应链 课件 第7章 智慧供应链的逆链和溯源.pptx
- 智慧供应链 课件 第8章 智慧供应链的脱碳.pptx
- 智慧供应链 课件 第9章 智慧供应链的韧性.pptx
- 智慧供应链 课件 第10章智慧供应链金融.pptx
- 《智慧供应链》 习题答案.docx
- 算法与数据结构(C++语言版)(第2版)课件 第10章_集合与查找16:9.pptx
- 算法与数据结构(C++语言版)(第2版)课件 第11章_散列表16:9.pptx
- 算法与数据结构(C++语言版)(第2版)课件 第12章_排序16:9.pptx
- 算法与数据结构(C++语言版)(冯广慧第2版)习题及答案 第1章课后习题答案.docx
- 算法与数据结构(C++语言版)(冯广慧第2版)习题及答案 第2章课后习题答案.docx
- 算法与数据结构(C++语言版)(冯广慧第2版)习题及答案 第3章课后习题答案.docx
- 算法与数据结构(C++语言版)(冯广慧第2版)习题及答案 第4章课后习题答案.docx
- 算法与数据结构(C++语言版)(冯广慧第2版)习题及答案 第5章课后习题答案.docx
- 算法与数据结构(C++语言版)(冯广慧第2版)习题及答案 第6章课后习题答案.docx
- 算法与数据结构(C++语言版)(冯广慧第2版)习题及答案 第7章课后习题答案.docx
文档评论(0)