文章目录
- Boruvka 算法
- Kruskal 算法
- Prim 算法
最小生成树是图论常见的问题之一,要求输入图为连通无向图,即任意两个顶点存在一个链路相连,而树结构是简单图,且无圈结构。
Boruvka 算法
boruvka_mst(g, distmx = weights(g); minimize = true)
返回一个元组 (mst, weights),其中 mst 是表示连通无向图 g 的最优(默认最小)生成树的边向量,distmx 为可选的权重矩阵用于提供不同的边权重,weights 则是通过 Boruvka 算法求解得到的生成树所有边的权重总和。该算法要求所有边必须具有不同的权重,以确保能正确生成最小/最大生成树。
可选参数
minimize=true:若设置为 false,则计算最大生成树。
using Graphs
a=complete_graph(4)
distmx=sparse([0 0.5 0.8 0.3;
0.5 0 0.7 0.4;
0.8 0.7 0 0.6;
0.3 0.4 0.6 0])
results=boruvka_mst(a, distmx,minimize=true)
println(results[1])
println(results[2])
Kruskal 算法
Kruskal_mst(g, distmx = weights(g); minimize = true)
返回一个树结构mst, 其中 mst 是表示连通无向图 g 的最优(默认最小)生成树的边向量,distmx 为可选的权重矩阵用于提供不同的边权重。该算法要求所有边必须具有不同的权重,以确保能正确生成最小/最大生成树。
可选参数
minimize=true:若设置为 false,则计算最大生成树。
using Graphs
a=complete_graph(4)
distmx=sparse([0 0.5 0.8 0.3;
0.5 0 0.7 0.4;
0.8 0.7 0 0.6;
0.3 0.4 0.6 0])
result=kruskal_mst(a, distmx, minimize=true)
println(result)
Prim 算法
prim_mst(g, distmx = weights(g))
返回一个树结构mst, 其中 mst 是表示连通无向图 g 的最优(默认最小)生成树的边向量,distmx 为可选的权重矩阵用于提供不同的边权重。该算法要求所有边必须具有不同的权重,以确保能正确生成最小/最大生成树。
可选参数
minimize=true:若设置为 false,则计算最大生成树。
using Graphs
a=complete_graph(4)
distmx=sparse([0 0.5 0.8 0.3;
0.5 0 0.7 0.4;
0.8 0.7 0 0.6;
0.3 0.4 0.6 0])
result=prim_mst(a,distmx)
println(result)