作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。
🍎个人主页:Matlab科研工作室
🍊个人信条:格物致知。
更多Matlab仿真内容点击👇
⛄ 内容介绍
何为树:连通且不含圈的图称为树。
图T=(V,E),|V|=n,|E|=m,下列关于树的说法等价:
- T是一个树。
- T无圈,且m=n-1。
- T连通,且m=n-1。
- T无圈,但每加一新边记得到唯一一个圈。
- T连通,但任舍去一边就不连通。
- T中任意两点,有唯一道路相连。
何为生成树:若图G=(V,E)的生成子图是一棵树,则称该树为图G的生成树,也称支撑树,简称为图G的数。图G中属于生成树的边称为数枝(Branch)。
何为最小生成树:连通图G=(V,E),每条边上有非负权L(e)。一棵树上所有树枝权的总和,称为这个生成树的权。具有最小权的生成树称为最小生成树,也就是说最小支撑树,简称最小树。
私以为,两种算法其实都是贪心,所以需要严格的证明。由于最近时间零散、数学久置未学、对算法领域没有系统了解。所以不进行深入探讨(也就是说证明),仅以一个简单实例做一个入门级的了解。
Prim算法:
给定连通赋权图G=(V,E,W),其中W为邻接矩阵,设两个集合P和Q,其中P用于存放G的最小生成树中的节点,集合Q存放G的最小G的最小生成树中的边。另集合P的初值为P={v1}(假设构造最小生成树时从v1出发),集合Q的初值为P={空集}。
(1)P = {v1},Q = {空集};
(2)while P ~= Q
找到最小边pv,其中p∈P,v∈V-P;
P = P + {v};
Q = Q + {pv};
end
Kruskal算法
(1)选e1∈E(G),使得w(e1) = min(选e1的权值最小)。
(2)e1,e2,...,ei已选好,则从E(G)-{e1,e2,...,ei}中选取ei+1,使得G[{e1,e2,...,ei,ei+1}]中无圈,且,w(ei+1) = min。
(3)直到选得en-1为止。
以下是问题:
|
⛄ 部分代码
clc
clear all
close all
Choices = {'Particle Swarm Optimization', 'Firefly Algorithm', 'Imperialist Competitive Algorithm'};
ANSWER = questdlg('Select the algorithm:', ...
'Minimum Spanning Tree', ...
Choices{1}, Choices{2}, Choices{3}, ...
Choices{1});
if strcmpi(ANSWER, Choices{1})
pso;
return;
end
if strcmpi(ANSWER, Choices{2})
fa;
return;
end
if strcmpi(ANSWER, Choices{3})
ica;
return;
end
⛄ 运行结果