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里所有顶点全在一个连通分量上。

  • 相关阅读:
    iOS软件版本更新思路
    Xcode里-ObjC, -all_load, -force_load
    NSFileManager
    [Android问答] px、dp和sp,这些单位有什么区别?
    annot refer to a non-final variable * inside an inner class defined in a different method"错误解析
    android Handler post sendMessage
    谈layout_gravity和gravity的用法
    Android LayoutInflater详解
    Android中pendingIntent的深入理解
    Intent和PendingIntent的区别
  • 原文地址:https://www.cnblogs.com/nightland/p/13504379.html
Copyright © 2011-2022 走看看