数学建模社区-数学中国

标题: 【图论】【Matlab】最小生成树之Kruskal算法【贪心思想超详细详解Kruskal算法并应用】 [打印本页]

作者: 2744557306    时间: 2023-11-30 15:11
标题: 【图论】【Matlab】最小生成树之Kruskal算法【贪心思想超详细详解Kruskal算法并应用】
实际问题引入
+ Q# V6 `( p( `; d  Y- ? 8df4cd096b61450ba2964229647f1a2c.png
, [$ c- V5 C5 K0 n1 u, y: z( G实这道题的答案,其实就是找到这个图的最小生成树。8 ^: K$ i. B5 u+ {* b8 \) W- H% H4 q6 p

4 e# ?( f% R! D5 a7 Y/ OKruskal算法' J5 d8 |/ G  o
此算法可以称为“加边法”,初始最小生成树的边数为 0,每迭代一次就选择一条满足条件的最小代价的边,加入到最小生成树边的集合里面。, A: {# r8 u" H4 T$ ?
其实核心思想就是贪心思想:通过局部最优达到整体最优
: M( d5 d" x2 f5 m8 {% g  d
% h7 s5 W9 t; W' i. P7 z将所有的边权进行排序! u& v4 t4 r' n6 @  O* X6 ]
不断迭代选择权最小的边,直到所有的点被连起来(边数=节点数-1)。
+ |1 L) W- ]& x8 V在迭代期间,如果边构成了环,就要丢弃该边,因为树中是不存在环的!
3 c1 {4 R7 |3 @2 q9 \/ c整体代码展示
  [4 g' _  k. ?! Z) a+ T  u  N在matlab中,最小生成树的生成直接用minspantree()函数就行。
  1. s=[1,1,1,1,2,2,3,3,4,4,5,5,6];
    . @7 J1 w0 X/ z( E7 [8 ^& N
  2. t=[2,3,4,5,3,6,5,7,5,6,6,7,7];
    : [, J3 C2 k$ m' }  Q- x
  3. w=[35,24,10,25,25,20,15,11,12,30,15,25,18];
    4 W1 `6 M$ K  O' i0 t
  4. names={'1','2','3','4','5','6','7'};
    ; l8 W! @/ E0 T: f
  5. G=graph(s,t,w,names);/ i+ s% T/ X+ @2 `9 M
  6. p=plot(G,"EdgeLabel",G.Edges.Weight);
    4 k1 }8 z! m. W: d% N' o& l
  7. % 求解最小生成树" i8 `; C) I# b, S4 ~! @: m$ e
  8. T=minspantree(G,"Method","sparse");
    2 }: [+ ^2 K- y8 G0 A
  9. % sparse代表的是Kruskal算法
    ) O+ u  m, b# t4 E) W
  10. % dense代表的是Prim算法+ ]: G# M- V" h
  11. $ x( f6 i, `1 V* ~) ^, b
  12. % sparse:Kruskal算法# `( v% Q  w; @+ X% G9 f+ D
  13. % 算法按权重对所有的边排序,然后将不构成循环的边添加到树中" y! N% g/ `) ?- @, V& X
  14. p=plot(G,"EdgeLabel",G.Edges.Weight);" H% O8 O0 X8 _. B5 O4 w
  15. highlight(p,T,"NodeColor","red","EdgeColor","red"); . E: j+ V9 p* t1 }
  16. % 将最小生成树的边设置为红色!& p# {7 z" K! Q8 d8 R  G
复制代码
VeryCapture_20231130145451.jpg
* ?: b1 D% ^6 r$ k9 \4 C
( `9 ?$ [- Z6 m5 p# U( Y5 s. N# y生成的最小生成树:* E% I" j& {7 p& F$ Z5 `
VeryCapture_20231130145538.jpg
- Q, S' ~" ?1 P' u0 B我们也可以把最小生成树的边和节点打印出来,也可以把整段路的权加起来看看: 05e97f2dfbb74011af93ab74933af41d.png 2 i. A: R7 M0 K! X# F
尾声

看到这里,相信我们已经学会Kruskal算法寻找最小生成树的过程了,当然,这离数学建模的要求,离我们的目标还非常遥远,博主在不断学习的过程中,也希望可以通过分享学习日记的方式带动大家!

# {( D3 {2 n6 [9 V' c" k: z
* k# E: u/ I0 m, s2 n+ q: `% g

a6d69d91254fe9e66009999ed24b2707.png (208.21 KB, 下载次数: 171)

a6d69d91254fe9e66009999ed24b2707.png






欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5