首页 > 其他分享 >最小生成树

最小生成树

时间:2024-04-06 12:44:06浏览次数:9  
标签:连通 最小 生成 权值 顶点 分量

1. 生成树与最小生成树

生成树:无向连通图 G 的一个子图如果是一棵包含 G 的所有顶点的树,则该子图称为 G 的生成树。生成树是连通图的极小连通子图。这里所谓极小是指:若在树中任意增加一条边,则将出现一个回路;若去掉一条边,将会使之变成非连通图。 

最小生成树:对无向连通图的生成树,各边的权值总和称为生成树的权,权最小的生成树称为最小生成树。

构造最小生成树的准则有三条:

  • 必须只使用该网络中的边来构造最小生成树;
  • 必须使用且仅使用 n-1 条边来连接网络中的 n 个顶点;
  • 不能使用产生回路的边。 

构造最小生成树的算法主要有:克鲁斯卡尔(Kruskal)算法、 Boruvka 算法和普里姆(Prim)算法,都得遵守以上准则。 

2. Kruskal 算法思想 

克鲁斯卡尔算法的基本思想是以边为主导地位,始终都是选择当前可用的最小权值的边。具体为:

  • 设一个有 n 个顶点的连通网络为 G(V, E),最初先构造一个只有 n 个顶点,没有边的非连通图 T = { V, Ø },图中每个顶点自成一个连通分量。
  • 当在 E 中选择一条具有最小权值的边时,若该边的两个顶点落在不同的连通分量上,则将此边加入到 T 中;否则,即这条边的两个顶点落在同一个连通分量上,则将此边舍去(此后永不选用这条边),重新选择一条权值最小的边。
  • 如此重复下去,直到所有顶点在同一个连通分量上为止。 

如下图(a)所示的无向网,其邻接矩阵如图(b)所示。利用克鲁斯卡尔算法构造最小生成树的过程如图(c)所示,首先构造的是只有 7 个顶点,没有边的非连通图。剩下的过程为(图(c)中的每条边旁边的序号跟下面的序号是一致的):

  • 在边的集合 E 中选择权值最小的边,即(1, 6),权值为 10;
  • 在集合 E 剩下的边中选择权值最小的边,即(3, 4),权值为 12;
  • 在集合 E 剩下的边中选择权值最小的边,即(2, 7),权值为 14;
  • 在集合 E 剩下的边中选择权值最小的边,即(2, 3),权值为 16;
  • 在集合 E 剩下的边中选择权值最小的边,即(7, 4),权值为 18,但这条边的两个顶点位于同一个连通分量上,所以要舍去;继续选择一条权值最小的边,即(4, 5),权值为 22;
  • 在集合 E 剩下的边中选择权值最小的边,即(7, 5),权值为 24,但这条边的两个顶点位于同一个连通分量上,所以要舍去;继续选择一条权值最小的边,即(6, 5),权值为 25。至此,最小生成树构造完毕,最终构造的最小生成树如图(d)所示,生成树的权为 99。 

克鲁斯卡尔算法的伪代码为: 

T = (V, φ);
while ( T 中所含边数 < n-1 )
{
    从 E 中选取当前权值最小的边(u, v);
    从 E 中删除边(u, v);
    if(边(u, v)的两个顶点落在两个不同的连通分量上) {
        将边(u, v)并入 T 中;
    }
}

Kruskal 算法在每选择一条边加入到生成树集合 T 时,有两个关键步骤:

  • 从 E 中选择当前权值最小的边(u, v),实现时可以用最小堆来存放 E 中所有的边;或者将所有边的信息(边的两个顶点、权值)存放到一个数组 edges 中,并将 edges 数组按边的权值从小到大进行排序,然后依先后顺序选用每条边。 
  • 选择权值最小的边后,要判断两个顶点是否属于同一个连通分量,如果是,则要舍去;如果不是,则选用,并将这两个顶点分别所在的连通分量合并成一个连通分量。在实现时可以使用并查集来判断两个顶点是否属于同一个连通分量、以及将两个连通分量合并成一个连通分量。 

标签:连通,最小,生成,权值,顶点,分量
From: https://www.cnblogs.com/love-9/p/18117328

相关文章

  • 强大专业的 AI 营销内容文案创作工具,支持内容一键生成、自动配图、图文转视频等
    推荐一款AI营销内容创作工具,它可以一键生成多种类型的营销内容,如营销文本、配图和短视频等。它可以智能生成大量的营销文案,可适应国内及海外的各类营销平台的风格,覆盖丰富的产品类型。只需输入关键词,便可快速生成原创的软文,可在各大媒体和自媒体平台发布,极大地提高了创作效率......
  • 最新AI创作系统ChatGPT网站系统源码+Ai绘画网站源码+Suno-v3-AI音乐生成大模型(sparkAi
    一、前言SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型+国内AI全模型。本期针对源码系统整体测试下来非常完美,那么如何搭建部署AI创作ChatGPT?小编这里写一个详细图文教程吧。已支持GPT语音对话、GPT-4模型、DALL-E3文生图、......
  • Python面试必备一之迭代器、生成器、浅拷贝、深拷贝
    本文首发于公众号:Hunter后端原文链接:Python面试必备一之迭代器、生成器、浅拷贝、深拷贝这一篇笔记主要介绍Python面试过程中常被问到的一些问题,比如:Python中的迭代器和生成器是什么,有什么作用Python中不可变类型有哪些在Python函数中,传递参数传递的是什么,值还是引......
  • 最小生成树
    最小生成树是有边权的无向图中的一个常见问题。在无向图G(V,E)中,把连通而且不含有环路的一个子图称为一棵生成树,它包含全部n个点和n-1条边。边权之和最小的树称为最小生成树(MinimalSpanningTree,MST)。MST的计算用到了一个基本性质:一个图的MST一定包含图中权值最小的......
  • pdmaner-代码生成器的使用
    一、什么是pdmanerPDManer是一款开源免费的数据库模型建模工具,它以其用户友好的界面和简单的操作流程而受到用户的欢迎。以下是一些关于PDManer的特点:多平台支持:支持Windows、Mac和Linux等多种操作系统,甚至包括国产操作系统。高颜值界面:界面设计简洁美观,使得用户上手更为容易......
  • AI绘画自动生成器有哪些?
    AI绘画自动生成器:探索创意与技术的完美融合导言:随着人工智能(AI)的快速发展,它在各个领域都展现出了惊人的应用潜力。其中,AI绘画自动生成器成为了艺术创作领域的一大亮点。这些自动生成器能够通过学习大量的图像数据和算法模型,生成出栩栩如生的艺术作品。本文将介绍几种目前......
  • 代码随想录算法训练营第二天 | 数组 209.长度最小的子数组
    leetcode209.长度最小的子数组题目209.长度最小的子数组给定一个含有n个正整数的数组和一个正整数target。找出该数组中满足其总和大于等于target的长度最小的连续子数组[numsl,numsl+1,...,numsr-1,numsr],并返回其长度。如果不存在符合条件的子数组,返回0。......
  • Android 14.0 添加自定义服务,并生成jar给第三方app调用
    1.概述在14.0系统ROM产品定制化开发中,由于需要新增加自定义的功能,所以要增加自定义服务,而app上层通过调用自定义服务,来调用相应的功能,所以系统需要先生成jar,然后生成jar给上层app调用,接下来就来分析实现的步骤,然后来实现相关的功能从而来实现所需要的功能2.关于添加系统......
  • 分类预测 | Matlab实现CPO-LSSVM冠豪猪算法优化最小支持向量机数据分类预测
    分类预测|Matlab实现CPO-LSSVM冠豪猪算法优化最小支持向量机数据分类预测目录分类预测|Matlab实现CPO-LSSVM冠豪猪算法优化最小支持向量机数据分类预测分类效果基本介绍程序设计参考资料分类效果基本介绍1.Matlab实现CPO-LSSVM冠豪猪算法优化最小支持......
  • Node.js毕业设计基于WEB的学生成绩查询系统(Express+附源码)
    本系统(程序+源码)带文档lw万字以上  文末可获取本课题的源码和程序系统程序文件列表系统的选题背景和意义选题背景:随着信息技术的飞速发展,互联网已经深入到我们生活的每一个角落。教育领域也不例外,越来越多的学校开始利用网络技术进行教学管理。其中,学生成绩查询系统是一......