今天学习了Prim算法和Kruskal算法,因为书中只给出了算法的实现,而没有给出关于算法正确性的证明,所以尝试着给出了自己的证明。刚才看了一下《算法》一书中的相关章节,使用了切分定理来证明这两个算法的正确性,更加简洁、优雅并且根本。相比之下,我的证明带着许多草莽气息,于此写成博客,只当是记录 ...
Kruskal算法思想: 把n个顶点看成看成n棵分离的树 每棵树只有一个顶点 ,每次选取可连接两个分离树中权值最小的边把两个分离的树合成一个新的树取代原来的两个分离树,如果重复n 步后便得到最小生成树。 Kruskal算法步骤: T 存放生成树的边,初值为空 C T 最小生成树的权,初值为 VS 分离树顶点的集合,初值为 v v vn A B W分别为边的顶点和权值数组,由用户输入 T , C T ...
2012-02-25 00:34 0 6750 推荐指数:
今天学习了Prim算法和Kruskal算法,因为书中只给出了算法的实现,而没有给出关于算法正确性的证明,所以尝试着给出了自己的证明。刚才看了一下《算法》一书中的相关章节,使用了切分定理来证明这两个算法的正确性,更加简洁、优雅并且根本。相比之下,我的证明带着许多草莽气息,于此写成博客,只当是记录 ...
Kruskal算法: 步骤1,选择边e1,使得权值w(e1)尽可能小; 步骤2,若已选定边e1,e2,...,ei,则从E\{e1,e2,...,ei}选取e(i+1),使得 (1)G[{e1,e2,...,e(i+1)}]为无圈图 (2)权值w(e(i+1 ...
Prim 算法思想: 从任意一顶点 v0 开始选择其最近顶点 v1 构成树 T1,再连接与 T1 最近顶点 v2 构成树 T2, 如此重复直到所有顶点均在所构成树中为止。Prim 算法步骤:T0 存放生成树的边,初值为空输入加权图的带权邻接矩阵 C = (Cij)n×n (两点间无边相连 ...
Prime算法的思路:从任何一个顶点开始,将这个顶点作为最小生成树的子树,通过逐步为该子树添加边直到所有的顶点都在树中为止。其中添加边的策略是每次选择外界到该子树的最短的边添加到树中(前提是无回路)。 Prime算法的正确性证明: 引理1:对于连通图中的顶点vi,与它相连的所有边中的最短边一定 ...
Kruskal算法 1.概览 Kruskal算法是一种用来寻找最小生成树的算法,由Joseph Kruskal在1956年发表。用来解决同样问题的还有Prim算法和Boruvka算法等。三种算法都是贪婪算法的应用。和Boruvka算法不同的地方是,Kruskal算法在图中存在相同权值的边时也有 ...
Kruskal算法和Prim算法都是用于查找无向带权图中的最小生成树。但是Kruskal算法的时间复杂度为O(Elog2(E)),而Prim算法则是O(Elog2(n)),考虑到最复杂的情况|E|=|V|^2,这时候Kruskal算法的上限为O(2Elog2(V)),与Prim算法 ...
Prim算法和Kruskal算法都能从连通图找出最小生成树。区别在于Prim算法是挨个找,而Kruskal是先排序再找。 一、Prim算法: Prim算法实现的是找出一个有权重连通图中的最小生成树 ...
1. Prim算法 1.1 概览 普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树。意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英语:Vertex (graph theory)),且其所有边的权值之和亦为最小。该算法 ...