目录
前言
上一章我们整理了最短路径中的Dijkstra算法。
现在我们整理最小生成树中Prim算法(普里姆算法)和Kruskal算法(克鲁斯卡尔算法)。
1. 介绍
最小生成树也是图论中常见问题,其指的是在一个图中找到一个连通子图,使得所有节点都能够互相到达,且总权值最小。
最小生成树的例子在生活中也很常见,比如城市的公交线路系统需要规划如何走完一趟路径和是最短的,或者快递公司如何给不同住址的客户送货才能是最短的路径。
2. Prim算法(普里姆算法)
2.1 Prim算法历史
普里姆算法最初由捷克数学家沃伊捷赫·亚尔尼克于1930年发现,后来在1957年由美国计算机科学家罗伯特·普里姆独立发现,1959年艾兹格·迪科斯彻也再次发现了该算法。因此,普里姆算法在某些情况下也被称为DJP算法、亚尔尼克算法或普里姆-亚尔尼克算法。
2.2 Prim算法的基本思路
首先选择一个起始节点,以这个节点将图分成两个集合。一个已选集合,一个未选集合。把起始节点加入已选集合。
然后从已选节点集合出发,不断选择权值最小的边连接到未选节点集合中的节点,并将其加入已选节点集合。
不断循环此过程,直到所有节点都被加入到已选节点集合中,形成最小生成树。
这就是Prim算法的基本思路。
简单来说,就是从一个点开始,不断寻找距离最短的边,将其加入最小生成树中,并将与之相连的未访问点所构成的边加入集合中,直到所有节点都被访问过为止。
2.3 Prim算法图解
在下面这个图的基础上,我们可以一步一步来分析Prim 算法的过程。
我们的目的是用此算法判断出构成最小生成树的所有边。





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


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

被折叠的 条评论
为什么被折叠?



