zoukankan      html  css  js  c++  java
  • 最小生成树算法实现与分析:Prim 算法,Kruskal 算法;

    连通图:无向图G中,若从顶点i到顶点j有路径相连,则称i,j是连通的;如果G是有向图,那么连接i和j的路径中所有的边都必须同向;如果图中任意两点之间都是连通的,那么图被称作连通图。

    强连通图:有向图G中,对于任意的两个点之间x,y,都存在x到y的路径,为强连通图;

    弱连通图:有向图的所有的有向边替换为无向边,所得到的图称为原图的基图。如果一个有向图的基图是连通图,则有向图是若连通图;

    单向连通:G=V,E;是有向图,对于任意u,v属于V,从u到达v或者v可达u,则称G为单向连通图;

    连通分量:无向图的一个极大连通图子图称为G的一个连通分量;连通图只有一个连通分量;

    极大连通子图:(无向图)

    • 连通图只有一个极大连通子图,就是它本身;
    • 非连通图有多个极大连通子图(非连通图的极大连通子图叫做连通分量,每个分量都是一个连通图);
    • 极大连通子图中,加入任何一个不在图点集中的点都会导致它不再连通;
    • 下图为非连通图,图中有两个极大连通子图(连通分量):

    极小连通子图:(无向图)

    • 一个连通图的生成树是该连通图的极小连通子图;(同一个连通图有不同的生成树,所以生成树不是唯一的,最小生成树是唯一的);
    • 极小连通子图是个连通图;
    • 极小连通子图中,顶点个数为n, 则边的个数为n-1;
    • 如果在生成树上添加一条边,一定会构成一个环;
    • 极小连通子图的每条边都不可少,如果去掉一条边,则变成两个连通分量;
    • 生成树:一个连通图的最小连通子图,无回路;

    极大强连通子图:(有向图)

    • 强连接图的极大强链接图为其本身;唯一;
    • 非强连接图有多个极大强连通子图。非强连通图的极大连通子图叫做强连通分量;

    最小生成树:一个有n个节点的连通图的生成树是原图的极小连通子图,且包含了原图中的所有n个节点,并且有保持图连通的最少的边;最少生成树可以使用Kruskal算法和Prim算法求出;

    Prim算法:此算法可以称为加点法,使用贪心思想进行求解,Vnew Vold-new 之间,代价最小的边对应的点,加入到Vnew之中;算法从任意一节点开始,知道Vnew中包含所有的点;

    • 图中所有顶点集合V, 初始结合Vnew = {s}, Vold-new = V-Vnew;
    • 在两个集合Vnew和Vold-new 组成的边中,选择代价最小的边(vnew, vold-new),加入到生成树;并把vold-new加入到Vnew之中;
    • 重复上述步骤,直到Vnew包含所有的点;
    • 证明:假设权值最小的边不在最小生成树中,此时将权值最小的边加入生成树中,必然会构成一个回路,去掉回路中权值最大的边,构成一个新的最小生成树,这时权值最小的边在最小生成树中,与原有假设构成矛盾,所以权值最小的边一定在最小生成树中;所以prim每次选入权值最小的边的点加入的策略是正确的。

    Kruskal算法:此算法可称为加边法;初始生成树边数为0,每次就选择一条满足条件的最小代价的边,加入到生成树的边集合中;

    • 把图中的所有边按代价从小到大排序;
    • 把图中的n个顶点,看成独立的n棵树组成的森林;
    • 按照权值从小到大选择边,所选边的顶点u,v应该属于两颗不同的树;则成为最小生成树的一条边,并将这两颗树合并为一棵树;
    • 重复上述操作,直到当前边集合中包括n-1课树为止;

    算法实现参考:https://github.com/yaowenxu/codes/tree/master/最小生成树算法

    保持更新,转载请注明出处;更多内容请关注cnblogs.com/xuyaowen;

    参考链接:

    https://www.cnblogs.com/zhchoutai/p/8687614.html

    极大连通子图与极小连通子图

    最小生成树(Kruskal和Prim算法)

    图论——最小生成树 

  • 相关阅读:
    macOS10.9+xcode6编译ffmpeg2.4.2 for ios
    [think in java]第12章 通过异常处理错误
    机房合作感受
    LeetCode 210. Course Schedule II(拓扑排序-求有向图中是否存在环)
    Java继承
    jQuery学习笔记之DOM操作、事件绑定(2)
    intellij IDEA常见操作
    log4j.properties配置详解
    jQuery学习笔记之概念(1)
    VC常用代码之创建进程
  • 原文地址:https://www.cnblogs.com/xuyaowen/p/minimum-spanning-tree.html
Copyright © 2011-2022 走看看