- 1、本文档共56页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Algorithm 8.2 SHORTESTPATH Input: A weighted directed graph G=(V,E), where V={1,2,..,n}. Output: The distance from vertex 1 to every other vertex in G. Assume that we have an empty heap H at the beginning. 1.Y?V-{1}; λ[1]?0; key(1)? λ[1] 2.for y?2 to n 3. if y is adjacent to 1 then 4. λ[y]=length[1,y] 5. key(y)? λ[y] 6. INSERT(H,y) 7. else 8. λ[y]? ∞ 9. key[y]? λ[y] 10. end if 11. end for NEXT PAGE Algorithm 8.2 SHORTESTPATH 12. for j?1 to n-1 13. y?DELETEMIN(H) 14. Y?Y-{y} 15. for each vertex w ∈Y that is adjacent to y 16. if λ[y]+length[y,w] λ[w] then 17. λ[w]? λ[y]+length[y,w] 18. key(w)? λ[w] 19. end if 20. if w H then INSERT(H,w) 21. else SIFTUP(H,H-1(W)) 22. end if 23. end for 24. end for O(mlog n) 最小生成树问题(Kruskal算法) 定义8.1:设G = (V, E)是一个具有含权边的连通无向图。G的一棵生成树(V,T)是G的作为树的子图。如给G加权并且T的各边的权的和为最小值,那么(V,T)就称为最小耗费生成树,简称生成树。 Kruskal算法: 对G的边以非降序权重排列; 对排好序的每条边,如果将其加入T不会形成回路,则加入树T中;否则将其丢弃。 例: Kruskal算法 6 1 2 3 5 4 1 2 13 11 3 9 7 4 6 (1,2) (1,3) (4,6) (5,6) (2,3) (4,5) (3,4) (2,4) (3,5) 1 2 3 4 6 7 9 11 13 6 1 2 3 5 4 若构成回路,则丢弃该边 Kruskal算法的实现 表示森林的数据结构 用不相交集数据结构来表示森林 初始时,图的每个顶点由包含一个顶点的树表示 算法执行时,森林中的每个连通分量由一棵树来表示 选择权值最小的边将两个连通分量连接起来由Union操作实现 Algorithm 8.3 KRUSKAL Input: A weighted connected undirected graph G=(V,E) with n vertices. Output: The set of edges T of a minimum cost spanning tree for G. 1.Sort the edges in E by nondecreasing weight 2.for each vertex v∈V 3. MAKESET{v} 4.end for 5.T={} 6.while |T|n-1 7. Let (x,y) be the next edge in E. 8. if FIND(x) ?FIND(y) then 9. Add(x,y) to T 10 UNION(x,y) 11 end if 12. end while Kruskal算法正确性证明 引理8.2:在含权无向图中,Kruskal算法能正确地找出最小生成树 证明: 对T的大小实施归纳法,证明T是最小生成树边集的子集 初始时,T={},命题成立; 设加入边e = (x,y)之前命题成立,即有T?T*,其中T*是最小生成树边的集合; 设X是包含x的子树的顶点集,T’=T∪{e},需证明T’也是最小生成树边集T*的子集。 Kruskal算法正确性证明 由于T?T*,若T*包含e,则T’=T∪{e} ?T*; 若T*不包含e,则T*∪{e}必定包含以e为一条边的回路; e=(x,y)连接了X中的一个顶点和V-
您可能关注的文档
- 第三维生素精要.ppt
- 第三文献的形成与流布(杜泽逊)精要.pptx
- 第钢筋混凝土受扭构件精要.ppt
- 第三污染物在生态系统中的行为精要.ppt
- 第三铣加工精要.ppt
- 第工程项目成本管理精要.ppt
- 第功率放大电路精要.ppt
- 第三细胞的基本结构一轮复习精要.ppt
- 第供配电系统精要.ppt
- 第三细胞概述南方医科大学精品课程导航精要.ppt
- 基本积分公式(24个).docx
- 电梯全套资料-20210724002603.docx
- 精神病患者的康复与社会适应.pptx
- 精神分裂症的抗精神病药物.pptx
- 精神疾病治疗的新趋势与方法.pptx
- 喷枪及类似器具项目风险分析和评估报告.docx
- 2024年贵州省金沙县人民医院招聘历年高频难、易错点200题模拟试题题库(培优B卷).docx
- 中国石油天然气股份有限公司兰州石化分公司整理定向招聘历年高频难、易错点100题模拟试题附带答案真题题.docx
- 东莞龙昌玩具有限公司2024年定向招聘历年高频难、易错点100题模拟试题附带答案题库大全(典型题).docx
- 历年湖南省岳阳县教委所属事业单位招考聘用50人高频难、易错点练习200题完整版(典优).docx
文档评论(0)