• 7.4 图的连通性问题



    title: 数据结构 | 图-4 | 图的连通性问题
    date: 2019-11-26 22:39:58
    tags: 数据结构


    最小生成树
    普里姆算法、克鲁斯卡尔算法

    最小生成树

    问题提出

    要在n个城市间建立通信联络网,
    顶点——表示城市
    权——城市间建立通信线路所需花费代价
    希望找到一棵生成树,它的每条边上的权值之和(即建立
    该通信网所需花费的总代价)最小———最小代价生成树
    图
    n个城市间,最多可设置n(n-1)/2条线路
    n个城市间建立通信网,只需n-1条线路

    • 问题转化为:如何在可能的线路中选择n-1条,能把
      所有城市(顶点)均连起来,且总耗费
      (各边权值之和)最小

    构造最小生成树方法

    普里姆(Prim)算法/T(n)=O(V²)

    算法思想:

    • 设连通网N=(V,{E}),
      点集U为已处理点集,最小生成树边集TE。
    • 初始任取一点,加入U,使U={v0};
    • 在所有u∈U,v∈V-U的边(u,v)∈E中,找一条代价最小的边(u0,v0)

    两点确定一条边,即在所有生成树邻接的边里找条最小的。

    • 将(u0,v0)并入集合TE,同时v0并入U

    把边并入生成树,点并入已处理点集。

    • 重复操作直至U=V。

    克鲁斯卡尔(Kruskal)算法/O(E log E)

    算法思想:

    • 设连通网N=(V,{E}),
      初始状态为只有n个顶点而无边的非连通图T=(V,{∅}),每个顶点自成一个连通分量
    • 在E中选取代价最小的边,若该边依附的顶点落在T中不同的连通分量上,则将此边加入到T中;
    • 否则,舍去此边,选取下一条代价最小的边依此类推,直至T中所有顶点都在同一连通分量上为止。

    一开始所有点各自独立,遍历E集合选代价最小边,若该边的两个顶点落在不同连通分量上,就加进T,直到T里所有顶点全在一个连通分量上。

  • 相关阅读:
    Git 安装使用及基础命令
    Ubuntu Anaconda3 环境下安装caffe
    Anaconda 安装及Python 多版本间切换
    基于 ZooKeeper 的分布式锁实现
    java 判断点是否在一条线段上
    python 安装opencv及问题解决
    python Opencv图像基础操作
    sctf pwn200
    BCTF warmup 50
    linux shadow破解
  • 原文地址:https://www.cnblogs.com/nightland/p/13504379.html
Copyright © 2020-2023  润新知