• [算法系列之二十七]Kruskal最小生成树算法


    简单介绍

    求最小生成树一共同拥有两种算法,一个是就是本文所说的Kruskal算法,还有一个就是Prime算法。

    在具体解说Kruskal最小生成树算法之前,让我们先回想一下什么是最小生成树。

    我们有一个带权值的图,我们要求找到一个全部生成树中具有最小权值的生成树。例如以下图所看到的,T是图G的生成树。但不是具有最小权值的生成树。

    这里写图片描写叙述

    我们能够把他们想象成一组岛屿和连接它们的可能的桥梁。当然修桥是非常昂贵和费时的,所以我们必需要知道建设什么样的桥梁去连接各个岛。只是有一个重要的问题。建设这样一组连接全部岛屿的桥梁的最低价格是多少。

    这里写图片描写叙述

    我们实际上需要构建一棵最小生成树,顶点表示岛屿,而边表示它们之间可能要修建的桥梁。每个可能修建的桥梁都有对应的权值(表示我们建造它所花费的时间和金钱等)。

    在实践中。我们仅仅可能使用一个最小生成树的可能用例。(This scenario is only one of possible use cases of where minimum spanning trees can be used in practice.)

    概要

    Kruskal算法開始由初始化一组集合,并建立| V|棵树,每棵树都仅仅包括了图的一个顶点。

    这里写图片描写叙述

    在建设最后生成树的过程中。我们维护一个森林。非常显然。我们由|V|棵树组成的森林開始,当中每个树都仅仅有是一个节点。

    这里写图片描写叙述

    在某些时候,我们有“K”棵树组成的森林,这几棵树都最小生成树的子树。

    这里写图片描写叙述

    构建终于的最小生成树最后一个步骤之前,我们有两个树(如上图的3),我们用剩下的最小权值边来连接这两棵树。

    构建树的过程中,我们依照权值的升序,对边进行排序。

    这里写图片描写叙述

    然后。获取边,检查每条边(u,v),其端点u和v是否是属于同一棵树。假设是。把(u,v)增加森林中就会形成一个回路,所以放弃这条边(u。v)。否则。说明两个顶点分属不同的树。

    这里写图片描写叙述

    关于Kruskal算法一个非常大的特点是,它也能够用在非连同图中。

    原文

    Computer Algorithms: Kruskal’s Minimum Spanning Tree

  • 相关阅读:
    软考笔记(二)
    软件工程笔记
    安卓反编译
    [转] 扫描二维码自动区分下载Android或者iOS
    git使用技巧总结
    利用iTunes给MP3添加专辑插图
    Flex弹性盒子中`flex-grow`,`flex-shrink`,`flex-basis`的区别
    Android 中Activity和Fragment的启动顺序
    Java 类加载的过程
    Android Studio 查看源码出现throw new RuntimeException("Stub!"); 解决办法
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/6993667.html
Copyright © 2020-2023  润新知