初识MST

在这里, 我们把图分为两类:有向图和无向图

对于求最小生成树,有向图和无向图的做法也是不一样的。

解决向图的算法,主要是有两个:primkruskal, 其中,prim用于稠密图,kruskal用于稀疏图。

解决有向图的算法,目前我知道的就是最小树形图

首先,我们对prim进行一下简述:

1、集合M, N:M的初状态是图中所有点,N为空;

2、在图中任选一个点,加入N并从M中删除

3、M中找出一个点,它到N中某一点的距离小于M中其他的点到N中任意一个点的距离,将这点加入N,并从M中删除;

4、如果有某一点和集合N中的点没有连接,那么说明这个图是不连通的;同时当图中所有的点都从M移动到N,结束算法,此时的这棵树就是最小生成树。

接下来说一下kruskal算法:

1、图中每一个点看做是一棵树,将整个图看做事森林;

2、将所有的边按照一定规则进行排序;

3、从小到大将边一次加入到森林中,如果加入一边后形成了环,那么就把这条边删除,也就是在保证不构成环的情况下将边次加入到图中;

4、程序结束有两种可能:

     (1)当图中所有点都被到一起,即构成一生成树的时候(此时可能还有较大的边没有被遍历),这棵树就是最小生成树

     (2)当所有的边都被遍历一次,但是图还是没有连通,那么说明不存在此图的最小生成树。

最后,总结一下我认为比较有难度的最小树形图:

0、删除图中自环

1对于除了根节点以外的每个点来说,在它的所有入边中选择最小的,保留;

2、判断此时的图是否有环,以及是否有孤立的点,如果有孤立的点那么说明无法构成最小树形图;

3、如果有环,将环缩为一个点(其实就是一个 决定将环中哪条边删除的过程)(如何把它缩为一个点在下一篇再详细说明)

4、重复第1、2、3步,直到图中没有环为止。

总结:三个算法都是贪心的思想!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值