1701009950
②是满足(i)的尽可能小的权。
1701009951
1701009952
③当第(2)步不能继续执行时,则停止。
1701009953
1701009954
采用计算机,MATLAB编程如下:
1701009955
1701009956
%避圈法 clc %清屏 clear all; %删除workplace变量 close all; %关掉显示图形窗口 b=[1 2 1; 1 3 4; 2 3 2; 2 4 3; 2 5 5; 3 4 1; 3 5 3; 4 5 2] [T,v,c]=kruskal(b)
1701009957
1701009958
其中Kruskal算法脚本文件如下:
1701009959
1701009960
%Kruskal算法 %b-图的边权矩阵 %T-最小生成树的边集合 %v-最小生成树的邻接矩阵 %c-最小生成树的权 %j-迭代的次数 %k-已经被选入生成树的边数 function [T,v,c]=kruskal(b) %根据边权矩阵求出图的边数 m=size(b,1); %根据边权矩阵求出图的顶点数,注意此处顶点的标号需要以自然数序 n=max(b(1
:2*m)); %整理边权矩阵让其按照权值由小到大的次序重新排列 [B,index]=sortrows(b,3); B=B’; %数据的初始化 t=1
:n; k=0; T=[]; c=0; %更新T,c,t(i) for i=1
:m if t(B(1,i))~=t(B(2,i)) %判断第i条边是否与树中的边形成圈 k=k+1; T(1
:2,k)=B(1
:2,i); c=c+B(3,i); tmin=min(B(1,i),B(2,i)); tmax=max(B(1,i),B(2,i)); for j=1
:n if t(j)==tmax t(j)=min(tmin,t(tmin)); end end end if k==n-1 break; end end %根据最小生成树的边集合构造邻接矩阵 v=zeros(n); k=size(T,2); for i=1
:k v(T(2*i-1),T(2*i))=1; v(T(2*i),T(2*i-1))=1; end
1701009961
1701009962
运行程序输出结果如下:
1701009963
1701009964
b = 1 2 1 1 3 4 2 3 2 2 4 3 2 5 5 3 4 1 3 5 3 4 5 2 T = 1 3 2 4 2 4 3 5 v = 0 1 0 0 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 c = 6
1701009965
1701009966
由结果可知,最小树模型为:
1701009967
1701009968
1701009969
1701009970
1701009971
由此可得到最小树模型如图8-21所示。
1701009972
1701009973
1701009974
1701009975
1701009976
图8-21 最小树模型
1701009977
1701009978
最小树应用比较广泛,在电网、互联网结构及石油管道中,为了保证连接所有节点所使用材料最少,即可用最小树模型,这样求解的结果能够实现最优化求解。因此最小树模型应用是数学理论结合实际应用的典型代表。
1701009979
1701009980
1701009981
1701009982
1701009984
我和数学有约:趣味数学及算法解析 8.6 最短路问题
1701009985
1701009986
【问题】何谓最短路?
1701009987
1701009988
【分析】
1701009989
1701009990
最短路问题(short-path problem):若网络中的每条边都有一个数值(长度、成本和时间等),则找出两节点(通常是源节点和目标节点)之间总权和最小的路径就是最短路问题。
1701009991
1701009992
最短路问题是网络理论解决的典型问题之一,可用来解决管路铺设、线路安装、厂区布局和设备更新等实际问题。
1701009993
1701009994
1701009995
1701009996
1701009997
1701009998
首先假设图的表述为:G=(V,E,W),其中顶点集,即顶点的个数|V|=p。wij表示边(vi,vj)的权,且需要满足非负条件。如果,则令。最短路问题即为求G中v1到其他各顶点的最短路径。用d(vj)表示从v1到vj的只允许经过已选出顶点的最短路径的权值。
1701009999
[
上一页 ]
[ :1.70100995e+09 ]
[
下一页 ]