数学建模社区-数学中国

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

作者: 2744557306    时间: 2023-11-30 15:11
标题: 【图论】【Matlab】最小生成树之Kruskal算法【贪心思想超详细详解Kruskal算法并应用】
实际问题引入
2 B1 X7 v. x! C6 u6 y3 P8 _; W 8df4cd096b61450ba2964229647f1a2c.png & j3 s$ U+ {; f& d7 e+ K
实这道题的答案,其实就是找到这个图的最小生成树。% c  i# e1 Z# [* c! C! ?
& f  s! s6 ], n( k1 P2 [. _
Kruskal算法
) k9 |3 M7 J) t1 \此算法可以称为“加边法”,初始最小生成树的边数为 0,每迭代一次就选择一条满足条件的最小代价的边,加入到最小生成树边的集合里面。
, {" X4 ^4 v" i, G( O- ~其实核心思想就是贪心思想:通过局部最优达到整体最优
/ C1 X: y, P$ f5 I' _! A9 X& L, s
将所有的边权进行排序( `0 C- E+ e" e) U# u* p  w
不断迭代选择权最小的边,直到所有的点被连起来(边数=节点数-1)。
- m; ?% {8 e! \在迭代期间,如果边构成了环,就要丢弃该边,因为树中是不存在环的!) m+ p" h. m, e' C' [( E& X5 ~
整体代码展示
; g6 }% R4 t6 H7 {+ [' F在matlab中,最小生成树的生成直接用minspantree()函数就行。
  1. s=[1,1,1,1,2,2,3,3,4,4,5,5,6];* }% `7 T, ^) w
  2. t=[2,3,4,5,3,6,5,7,5,6,6,7,7];
    # n+ \6 M0 B3 e. ?/ b
  3. w=[35,24,10,25,25,20,15,11,12,30,15,25,18];
      d$ O: w% Z- e- Z) `& i3 \+ |
  4. names={'1','2','3','4','5','6','7'};
    ) I4 `5 @' C2 B  P- y
  5. G=graph(s,t,w,names);( B- v0 e3 J' t; ^1 z
  6. p=plot(G,"EdgeLabel",G.Edges.Weight);/ |* _. M/ v$ B) Y' P* s
  7. % 求解最小生成树
    ; Y# w! j) |5 z( d; C
  8. T=minspantree(G,"Method","sparse");& _" @! m6 r" m; i% H, K  C3 S
  9. % sparse代表的是Kruskal算法
    . }/ ~+ o- h( _( g/ |3 U
  10. % dense代表的是Prim算法
    & f9 F( F' s& b* I7 w  B

  11. # d2 [4 Y& |* W0 l2 a
  12. % sparse:Kruskal算法
    & B+ ^% X+ V+ u" Y8 s
  13. % 算法按权重对所有的边排序,然后将不构成循环的边添加到树中; \+ E) y# }/ P0 f/ V6 L7 Z
  14. p=plot(G,"EdgeLabel",G.Edges.Weight);; B$ m5 [0 F, N7 v& U& t
  15. highlight(p,T,"NodeColor","red","EdgeColor","red");
    . l% v/ h2 U0 f. N+ {" \0 U
  16. % 将最小生成树的边设置为红色!3 U% g! R1 n% g0 r3 w! g0 Y- u! X
复制代码
VeryCapture_20231130145451.jpg
2 F* N2 c3 D7 M3 n. Z  K; B! N  {' q3 ?- K) p
生成的最小生成树:
" q! n* x( L# y4 ^8 T VeryCapture_20231130145538.jpg
7 x5 r, _/ i1 a! g0 C我们也可以把最小生成树的边和节点打印出来,也可以把整段路的权加起来看看: 05e97f2dfbb74011af93ab74933af41d.png 1 [0 C; m$ }, S# L) R' I
尾声

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

0 s- r5 K0 ^% ]  p# f1 T- _. V
3 V- w7 U5 ?' @; A, U# [; Q% _

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

a6d69d91254fe9e66009999ed24b2707.png






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