武汉大学《算法设计与分析》教学课件-8贪心算法.ppt

武汉大学《算法设计与分析》教学课件-8贪心算法.ppt

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Algorithms Design Techniques and Analysis 例子 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 !构成回路, 这条边被丢弃. Success! Algorithms Design Techniques and Analysis Kruskal算法的执行 数据结构来表示森林: 为有效地实现此算法,我们需要某种机制来检测加入边后是否构成回路。让它在算法的每个时刻来表示森林,并且在向T中添加边时动态检测是否有回路生成。 这种数据结构的一个合适选择是4.3节讨论过的不相交集表示法 开始时,图的每个顶点由一棵包含一个顶点的树表示 在算法的执行过程中,森林中的每个连通分量由一棵树来表示。 Algorithms Design Techniques and Analysis 算法8.3 KRUSKAL 输入:包含n个顶点的含权连通无向图G=(V,E)。 输出: 由G生成的最小耗费生成树T组成的边的集合。 1. 按非降序权重将E中的边排序 2.for 每条边v∈V 3. MAKESET{v} 4.end for 5.T={} 6.while |T|n-1 7. 令 (x,y)为E中的下一条边. 8. if FIND(x) ?FIND(y) then {检查x,y是否在同一颗树中} 9. 将(x,y) 加入 T 10 UNION(x,y) 11 end if 12. end while Algorithms Design Techniques and Analysis 正确性 引理8.2: 在含权无向图中,算法KRUSKAL正确地找出最小生成树。 反证法:假设KRUSKAL生成的不是最小生成树 1).设KRUSKAL生成的树为G0 2).假设存在Gmin使得cost(Gmin)cost(G0)?? 则在Gmin中存在u,v不属于G0 3).将u,v加入G0中可得一个环,且u,v不是该环的最长边(这是因为u,v∈Gmin) 4).这与KRUSKAL每次生成最短边矛盾 5).故假设不成立,命题得证. Proof P241(or P153) Algorithms Design Techniques and Analysis 算法分析 第1步和第2步分别花费O(mlogm) 和Θ(n), 这里 m = |E|. 第7步好执行n-1次总共要Θ(n)时间。合并运算执行n-1次,查找运算最多2m次. 第5步花费Θ(1),再加上第9步最多执行m次,它的总花费是O(m). 由定理4.3,这两个运算的总花费是O(mlog*n). 。这样算法总的运行时间取决于排序步,也就是O(mlogm) p153 Algorithms Design Techniques and Analysis 8.4 最小耗费生成树 (Prim算法) 基本思想 设G=(V,E),为了简便起见,V取整数集合 {1,2,…,n}. 算法从建立两个顶点集合开始: X={1}和Y={2,…,n} 。接着生长一棵生成树,每次一条边。 在每一步,它找出一条权重最小的边(x,y) ,这里x∈X,y ∈Y并且把y从Y移到X。重复这一步直到Y为空。 Algorithms Design Techniques and Analysis Prim算法 此算法概况如下: T?{}; X?{1}; Y?V-{1} while Y ?{} 设(x,y)是最小权重的边,其中x∈X and y∈Y X?X∪{y} Y?Y-{y} T?T∪{(x,y)} end while Algorithms Design Techniques and Analysis 例子 6 1 2 3 5 4 1 2 13 11 3 9 7 4 6 Success! Algorithms Design Techniques and Analysis 算法 8.4 PRIM p154 输入:含权连通无向图G=(V,E), 其中 V={1,2,..,n}. 输出:由G生成的最小耗费生成树T组成的边的集合。 1.T?{}; X?{1}; Y?V-{1} 2.for y?2 to n 3. if y 邻接于1 then 4. N[y]?1 5. C[y]?c[1,y]

文档评论(0)

1亿VIP精品文档

相关文档