【算法】最小生成树—Prim算法与Kruskal算法

Prim算法和Kruskal算法都是解决最小生成树问题的经典算法。最小生成树是原图的最小连通子图,它包含原图的全部结点,且保持图连通的所有边代价和最小。一个连通图可能有多个最小生成树。

一、Prim算法

含义

Prim算法,也被称为普里姆算法,是图论中的一种算法,主要用于在加权连通图中搜索最小生成树。这意味着通过Prim算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点,且其所有边的权值之和亦为最小。
主要思想:从某个顶点开始,不断选择与当前生成树相连的最小权值的边,将其对应的顶点加入到生成树中,直到所有顶点都加入到生成树中为止

算法步骤

(1)初始状态:U={u0},TE={}。其中,u0是顶点集合 V中的某一个顶点。
(2)在所有u属于U,U属于V-U的边(u,v)属于E中找一条权值最小的边(u0,v0),将这条边加进集合TE中,同时将此边的另一顶点v0并入U。
这一步骤的作用是在边集E里找一条两个顶点分别在集合 U和V-U中且权值最小的边,把这条边添加到边集 TE 中,并把这条边上不在U中的那个顶点加入到U中。
13
(3)如果U=V,则算法结束;否则重复步骤(2)。

图解

在这里插入图片描述

一、Kruskal算法

含义

Kruskal算法是一种用来查找最小生成树的算法,它使用的贪心准则是从剩下的边中选择不会产生环路且具有最小权值的边加入到生成树的边集中。
主要思想:先对图中的所有边按照权值进行从小到大的排序,然后从小到大依次选取边,若这条边连接的两个顶点不在同一个连通分量中,则将其加入生成树中,否则舍弃,直到生成树中包含所有顶点或者所有边都已遍历完

算法步骤

1、将图中的所有边按照权值从小到大进行排序。
2、初始化一个空的最小生成树。
3、依次遍历排序后的边,判断当前边的两个顶点是否在同一个连通分量中。如果不在同一个连通分量中,则将该边加入最小生成树中,并将这两个顶点合并到同一个连通分量中。如果已经在同一个连通分量中,则跳过该边,继续遍历下一条边。
4、重复步骤3,直到最小生成树中包含了所有的顶点,或者所有的边都已经遍历完毕。

图解

在这里插入图片描述

三、Prim算法和Kruskal算法的区别

1、时间复杂度
Prim算法的时间复杂度为O(V^2),其中V为顶点的个数;
而Kruskal算法的时间复杂度为O(ElogE),其中E为边的个数。在E远大于V的情况下,Kruskal算法更加高效。

2、实现方式
Prim算法可以使用邻接矩阵或邻接表来表示图,并且需要使用堆来维护当前生成树与剩余顶点之间的边的权重。
Kruskal算法可以使用并查集来判断加入的边是否形成回路。

3、适用场景
Prim算法适用于稠密图,即边的数量接近于顶点数量的平方;
而Kruskal算法适用于稀疏图,即边的数量接近于顶点数量的线性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/501085.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSS技巧:实现两个div在同一行显示的方法

css如何让两个div在同一行显示 - web开发 - 亿速云 在Web开发中,经常遇到需要将多个元素水平排列在同一行的情况。其中一个常见的需求是将两个div元素放置在同一行上,使它们并排显示。在本文中,我们将介绍几种实现这一效果的CSS方法。 1. 使…

多模态论文阅读-LLaVA

Visual Instruction Tuning Abstract1. Introduction2. Related Work3. GPT-assisted Visual Instruction Data Generation4. Visual Instruction Tuning4.1 Architecture4.2 Training 5 Experiments5.1 Multimodal Chatchot5.2 ScienceQA 6 Conclusion Abstract 使用机器生成…

韦东山嵌入式Liunx入门驱动开发四

文章目录 一、异常与中断的概念及处理流程1-1 中断的引入1-2 栈(1) CPU实现a ab的过程(2) 进程与线程 1-3 Linux系统对中断处理的演进1-4 Linux 中断系统中的重要数据结构(1) irq_desc 结构体(2) irqaction 结构体(3) irq_data 结构体(4) irq_domain 结构体(5) irq_domain 结构…

十二、Qt自定义Widget组件、静态库与动态库

一、自定义Widget组件 1、自定义Widget组件 使用步骤采用提升法(promotion)重新定义paintEvent事件 2、实现程序 (1)创建项目,基于QWidget (2)添加类,为Widget组件提升类 #inclu…

钉钉机器人发送折线图卡片 工具类代码

钉钉机器人 “创建并投放卡片 接口 ” 可以 发送折线图、柱状图 官方文档:创建并投放卡片 - 钉钉开放平台 0依赖、1模板、2机器人放到内部应用、3放开这个权限 、4工具类、5调用工具类 拼接入参 卡片模板 自己看文档创建,卡片模板的id 有用 0、依赖…

Ti的ccs生成bin文件

1.老版本是直接在post-build中添加指令就可以 "${CCE_INSTALL_ROOT}/utils/tiobj2bin/tiobj2bin" "${BuildArtifactFileName}" "${BuildArtifactFileBaseName}.bin" "${CG_TOOL_ROOT}/bin/ofd2000" 2.新的几个版本发现不行了&…

伊理威科技:抖音上开店铺需要什么条件

在数字浪潮的推动下,抖音已成为连接品牌与消费者的新桥梁。若想在此平台开设小店,需满足一系列条件,方可乘风破浪。首要条件是拥有一张有效的身份证明或企业营业执照,这是验证商家身份和合法经营的基础。接着,商品质量…

服务器权限:Error: EACCES: permission denied, open‘/Cardiac/uniquC.csv

背景: 我想在服务器上传一个文件uniquC.csv,但是服务器说我没有权限 解决方案: 1. 查看目前是否存在对文件夹的权限 ls -ld /Cardiac/ # your fold path 此时,我发现 这也意味着root也没有赋予写的权限。 2. 拿到root权限 …

javaWebssh票据管理系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 java ssh票据管理系统是一套完善的web设计系统(系统采用ssh框架进行设计开发),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模 式开发。开发环境为TOMCAT7.0,My…

112.龙芯2k1000-pmon(11)- gzrom-dtb.bin 文件的组成

最近又要折腾2k1000的设备了,研究了一下gzrom文件组成部分。 pmon的编译可以参考之前的文档,这里我就不详述了 源码:GitHub - zhaozhi0810/pmon-ls2k1000-2022 gzrom-dtb.bin的生成命令在Makefile.inc(zloader.ls2k-hj20004目录…

Linux信号【产生-保存-处理】

目录 前言: 1、进程信号基本概念 1.1、什么是信号? 1.2、信号的作用 2、键盘键入 2.1、ctrlc 终止前台进程 2.1.1、signal 注册执行动作 3、系统调用 3.1、kill 函数 3.2、模拟实现 myKill 3.3、raise 函数 3.4、abort 函数 4、软件条件信号…

模拟算法题练习(二)(DNA序列修正、无尽的石头)

(一、DNA序列修正) 问题描述 在生物学中,DNA序列的相似性常被用来研究物种间的亲缘关系。现在我们有两条 DNA序列,每条序列由 A、C、G、T 四种字符组成,长度相同。但是现在我们记录的 DNA序列存在错误,为了…