算法复习(一) 最小生成树相关问题

9 篇文章 0 订阅
3 篇文章 0 订阅

很长一段时间内,zhn_666每周会更一些之前的学过的算法,也会把曾经因为懒惰之类的原因没学的算法重新学一遍,这次会好好写博客,希望有缘人看到也能学到点东西

这周俺要复习的算法是有关最小生成树的
首先介绍一些关于图的定义

- 连通图:在一张无向图中,任意两点都联通,则称此无向图为连通图
- 强连通图:在一张有向图中,任意两点都联通,则称此有向图为强连通图
- 生成树:在有n个点连通图中,选n-1条边构成的连通子图,则为一棵生成树。
- 最小生成树:在生成树中,使得这n-1条边权值和最小,为最小生成树。

解决最小生成树类的问题有主要两种方法,第一种为Kruskal算法,第二种为prim算法

  1. Kruskal 算法
    此算法可以称为“加边法”,初始最小生成树边数为0,每次就选择一条满足条件的最小代价边,加入到最小生成树的边集合里。
    (1) 把图中的所有边按代价从小到大排序,把每个点看成一棵树;
    (2) 按权值从小到大选择边,所选的边连接的两个顶点u,v,u,v,应属于两颗不同的树,则成为最小生成树的一条边,并将这两颗树合并作为一颗树。(前置技能:并查集)
    (3)重复(2),直到构成了一棵n-1条边的树。

  2. prim 算法
    此算法可以称为“加点法”,我们随便选择一个不在图中的点,选择它与这张图能相连的最小权值的边,直到构成一棵树。
    (1) 在一个加权连通图中,顶点集合V,边集合为E
    (2) 任意选出一个点作为初始顶点,标记为visit,计算所有与之相连接的点的距离,选择距离最短的,标记visit.
    (3) 重复以下操作,直到所有点都被标记为visit:

题单(先写一发水的,代码日后会更新 咕咕咕警告在这里插入图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值