DSA第9章-新(最小代价生成树).pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
DSA第9章-新(最小代价生成树)

把V分成两组: (1)S:存放已求得最短路径的顶点的集合 (2)V-S=T:尚未确定最短路径的顶点集合 将T中顶点按最短路径非递减的次序加入到S中。 保证: (1)从源点V0到S中各顶点的最短路径长度都不大于从V0到T中任何顶点的最短路径长度 (2)每个顶点对应一个距离值 S中顶点:从V0到此顶点的最短路径长度 T中顶点:从V0到此顶点的只包括S中顶点作中间顶点的最短路径长度 求下一条最短路径的顶点 //choose 实现从数组d中选择最小值 k=Choose(d,s);s[k]=true; //将k 加入集合S //修正d、path for (w=0; wn; w++) //更新d和path if (!s[w] d[k]+a[k][w] d[w]){ d[w]=d[k]+a[k][w]; path[w]=k; } 下一条最短路径一定是从v0出发,中间只经过S集合中的顶点便可到达的顶点剩余集合V-S中的那些顶点的路径中的一条。若不是这样,设(v0,…,vp ,vt)是下一条最短的路径,还至少包含另一个非S中的顶点p,则(v0,…,vp,vt)不可能是下一条最短路径。显然,在边上的权值非负的情况下,路径(v0,…,vp )不比它长。 迪杰斯特拉算法的C++程序 (1)choose实现从数组d中选择最小值 template class T int ExtMGraphT::Choose(int* d, bool* s) { int i,minpos; T min; min=INFTY; minpos=-1; for (i=1;in;i++) if (d[i]min !s[i]){ min=d[i];minpos=i; } return minpos; } (2) Dijkstra算法的C++程序 template class T void ExtMGraphT::Dijkstra(int v,T* d,int* path) { int i,k,w; if (v0||vn-1) throw OutOfBounds; bool *s=new bool[n]; for (i=0;in;i++){ s[i]=false;d[i]=a[v][i]; if (i!=v d[i]INFTY) path[i]=v; else path[i]=-1; } s[v]=true; d[v]=0; for (i=1;in-1;i++){ k=Choose(d,s);s[k]=true;//当前路径最短者,加入S for (w=0; wn; w++) //更新d和path if (!s[w] d[k]+a[k][w] d[w]){ d[w]=d[k]+a[k][w]; path[w]=k; } } } 这一算法的执行时间很显然为O(n2)。 * 9.6 最小代价生成树 一个连通图的生成树是一个极小连通子图,它包括图中全部顶点,并且有尽可能少的边。 一棵生成树的代价是各条边上的代价之和。 一个网络的生成树中具有最小代价的生成 树称为该网络的最小代价生成树。 问题的引入:在n个城市之间架设通信线路。已知每两个城市间架设线路的代价,问如何选择n-1条线路,可以使总代价最小? 构造最小代价生成树的两种算法: 普里姆算法(Prim) 克鲁斯卡尔算法(Kruskal) 课堂提要 第9章 图 9.1 图的基本概念 9.2 图的存储结构 9.3 图的遍历 9.4 拓扑排序 9.5 关键路径 9.6 最小代价生成 树 9.6.1 基本概念 0 1 3 2 3 5 1 2 7 0 1 3 2 1 2 7 0 1 3 2 3 5 7 0 1 3 2 3 1 2 设G=(V,E)是带权的连通图,T=(V’,E’)是正在构造中的生成树。初始状态下,这棵生成树只有一个顶点,没有边,即V’={v0},E’={ },v0是任意选定的起始顶点。 从初始状态开始,重复执行下列运算: 在所有u?V’,v?V-V’的边(u,v),(u,v)?E 中找一条代价最小的边(u’,v’), 边(u’,v’)并入集合E’,将顶点v’并入集合V’。 直到V=V’为止。 这时E’中必有n-1条边,T=(V’,E’)是图G的一棵最小代价生成树。 1.普里姆算法(Prim) 9.6

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档