prim(普里姆)算法与Kruskal(克鲁斯卡尔)算法

下面是我们的题目,如何得出下图的最小生成树?

 

1.prim算法(适用于计算稠网)

思想其实很简单:随便找一个点作为起始点(因为每个点都需要经过所以找那个点都一样),然后找到和这个点相连接的边中权值最小的,连起来,然后再从,这两个点出发找和他们连接的边,同样是找最小的(两个点所对应的除它们连线外的所有边中最小的),然后连起来,得到三个点,再找三个点连接边中权值最下的。。。。等找到6个点就完成了。

 

 

一下为代码:

运行结果为五个数据,每个数据据减一就是他要连接的下一个点。

 

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

克鲁斯卡尔算法:将所有边的权值按从小到大的顺序进行排序,然后从上到下进行选取(第一个选取到的边为权值最小的边ÿ

普里姆(Prim)算法克鲁斯卡尔(Kruskal)算法都是用于解决最小生成树问题的算法。 最小生成树问题是指在一个无向连通图中,找到一棵生成树,使得树上所有边的权值之和最小。生成树是指一个无向图的生成子图,它是一棵树,且包含图中所有顶点。 下面我们分别介绍普里姆算法克鲁斯卡尔算法: 1. 普里姆算法 普里姆算法是一种贪心算法,它从一个任意点开始,逐步扩展生成树,每次选择当前生成树到未加入的点中距离最近的点,并将其加入生成树。 具体实现步骤如下: - 随机选择一个起始点,将其加入生成树。 - 在生成树中的所有节点中,找到到未加入生成树的节点中距离最小的节点,将其加入生成树。 - 重复以上步骤,直到生成树包含了所有节点。 2. 克鲁斯卡尔算法 克鲁斯卡尔算法也是一种贪心算法,它从边集合中选择边,逐步扩展生成树,每次选择当前边集合中权值最小的边,并将其加入生成树。 具体实现步骤如下: - 将所有边按照权值从小到大排序。 - 从权值最小的边开始,逐个加入生成树,如果加入当前边会形成环,则不加入该边。 - 重复以上步骤,直到生成树包含了所有节点。 两种算法的时间复杂度都是O(ElogE),其中E为边数。普里姆算法在处理稠密图时效率更高,而克鲁斯卡尔算法在处理稀疏图时效率更高。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值