数据结构与算法 —— 最小生成树Prim算法和Kruskal算法详细图解以及python实现

本文详细介绍了最小生成树问题,包括Prim算法和Kruskal算法的历史、基本思路、图解及Python代码实现。这两种算法分别从不同角度构造最小生成树,Prim算法从一个节点逐步扩展,而Kruskal算法则按边的权值排序避免形成环。此外,文中还强调了最小生成树与最短路径的区别。

目录

前言

1. 介绍

2. Prim算法(普里姆算法)

2.1 Prim算法历史

2.2 Prim算法的基本思路

2.3 Prim算法图解

2.4 Prim算法(python)实现

3. Kruskal算法(克鲁斯卡尔算法)

3.1 Kruskal算法的基本思路

3.2 Kruskal算法图解

3.3 Kruskal算法(python)实现

4. 最小生成树和最短路径的区别

5. 结尾


前言

上一章我们整理了最短路径中的Dijkstra算法
现在我们整理最小生成树中Prim算法(普里姆算法)和Kruskal算法(克鲁斯卡尔算法)。


1. 介绍

最小生成树也是图论中常见问题,其指的是在一个图中找到一个连通子图,使得所有节点都能够互相到达,且总权值最小。

最小生成树的例子在生活中也很常见,比如城市的公交线路系统需要规划如何走完一趟路径和是最短的,或者快递公司如何给不同住址的客户送货才能是最短的路径。


2. Prim算法(普里姆算法)

2.1 Prim算法历史

普里姆算法最初由捷克数学家沃伊捷赫·亚尔尼克于1930年发现,后来在1957年由美国计算机科学家罗伯特·普里姆独立发现,1959年艾兹格·迪科斯彻也再次发现了该算法。因此,普里姆算法在某些情况下也被称为DJP算法、亚尔尼克算法或普里姆-亚尔尼克算法。

2.2 Prim算法的基本思路

首先选择一个起始节点,以这个节点将图分成两个集合。一个已选集合,一个未选集合。把起始节点加入已选集合。

然后从已选节点集合出发,不断选择权值最小的边连接到未选节点集合中的节点,并将其加入已选节点集合。

不断循环此过程,直到所有节点都被加入到已选节点集合中,形成最小生成树。

这就是Prim算法的基本思路。

简单来说,就是从一个点开始,不断寻找距离最短的边,将其加入最小生成树中,并将与之相连的未访问点所构成的边加入集合中,直到所有节点都被访问过为止。

2.3 Prim算法图解

在下面这个图的基础上,我们可以一步一步来分析Prim 算法的过程。

我们的目的是用此算法判断出构成最小生成树的所有边。

 

 接下来一样的操作,就不在图中标注文字解释了。

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值