zoukankan      html  css  js  c++  java
  • 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里所有顶点全在一个连通分量上。

  • 相关阅读:
    shell75叠加
    shell73while ping测试脚本
    shell72while读文件创建用户
    shell70批量修改远程主机的ssh配置文件内容
    shell68批量创建用户(传多个参数)
    js限制input输入
    php获取textarea的值并处理回车换行的方法
    strtr对用户输入的敏感词汇进行过滤
    mysql执行语句汇总
    js倒计时防页面刷新
  • 原文地址:https://www.cnblogs.com/nightland/p/13504379.html
Copyright © 2011-2022 走看看