- 问题
1举一个实例,画出采用Prim算法构造最小生成树的过程,并按实验报告模板编写算法。
2举一个实例,画出采用Kruskal算法构造最小生成树的过程,并按实验报告模板编写算法。
[描述算法问题,首选形式化方式(数学语言),其次才是非形式化方式(日常语言)]
2. 解析
-
prim算法,就是从顶点出发,每次加入一条最小权的边和对应的顶点,逐渐生成树。
-
Kruskal算法,就是将各条边,按照从小到大排序后,参考联连通分量顺序构造,以生成最小树。
[问题的理解和推导,可用电子版直接在此编写,也可用纸笔推导,拍照嵌入本文档]
3. 设计
- 所有的点集合V分为 已经放入最小生成树集合的S和未放入的V-S,每次在V-S中选择一个距离S最近的点放入到S中,直到所有的点都放入S。
2 .
[核心伪代码]
4. 分析
- Prim 算法的时间复杂度为 O(n^2 ),与网中的边数无关,因此适用于求边稠密的网的最小生成树。
- Kruskal 算法需对各条边按权值进行排序,时间复杂度为 O(N)(N 为网中边的数目),因此适用于求边稀疏的网的最小生成树。
[算法复杂度推导]
5. 源码
https://github.com/lizi196/suan_fa_fen_xi/tree/2f772545729a98005488192aff2ce61b8751600b
[github源码地址]