树:连通性、最小生成树

图&网络系列博文:

【1】图与网络模型及方法:图与网络的基本概念

【2】图&网络模型应用—最短路径问题

【3】树:基本概念与最小生成树

【4】匹配问题: 匈牙利算法 、最优指派、相等子图

【5】Euler 图和 Hamilton 图

【6】计划评审方法和关键路线法【统筹方法】:广泛地用于系统分析和项 目管理

【7】最小费用流及其求法 :

【8】最大流问题  

【9】钢管订购和运输问题


目录

1 基本概念

2 应用—连线问题

2.1 prim 算法构造最小生成树                         2.1 Kruskal 算法构造最小生成树



 

1 基本概念

连通的无圈图叫做树,记之为T 。若图G 满足V(G) =V(T ) , E(T ) ⊂ E(G) , 则称T 是G 的生成树。图G 连通的充分必要条件为G 有生成树。一个连通图的生成树 的个数很多,用τ (G) 表示G 的生成树的个数,则有公式

树有下面常用的五个充要条件。

定理 1 (i)G 是树当且仅当G 中任二顶点之间有且仅有一条轨道。

(ii)G 是树当且仅当G 无圈,且ε =ν −1。

(iii)G 是树当且仅当G 连通,且ε =ν −1。

(iv)G 是树当且仅当G 连通,且∀e∈ E(G) ,G − e 不连通。

(v)G 是树当且仅当G 无圈,∀e∉ E(G) ,G + e 恰有一个圈。

2 应用—连线问题

 欲修筑连接 n 个城市的铁路,已知i 城与 j 城之间的铁路造价为Cij ,设计一个线 路图,使总造价最低。

连线问题的数学模型是在连通赋权图上求权最小的生成树。赋权图的具最小权的生 成树叫做最小生成树

下面介绍构造最小生成树的两种常用算法。

2.1 prim 算法构造最小生成树

设置两个集合 P 和Q ,其中 P 用于存放G 的最小生成树中的顶点,集合Q 存放G的最小生成树中的边。令集合 P 的初值为 { P = v1 }(假设构造最小生成树时,从顶点 v1 出发),集合Q 的初值为Q = Φ 。

prim 算法的思想是,从所有 p ∈ P ,v ∈V − P 的边 中,选取具有最小权值的边 pv ,将顶点 v 加入集合 P 中,将边 pv 加入集合Q 中,如 此不断重复,直到 P =V 时,最小生成树构造完毕,这时集合Q 中包含了最小生成树 的所有边。

树:连通性、最小生成树_第1张图片

例 13         用 prim 算法求图 5 的最小生成树。 我们用  \large result_{\, 3\times n }的第一、二、三行分别表示生成树边的起点、终点、权集合。Matlab 程序如下:

clc;clear;
a=zeros(7);
a(1,2)=50; a(1,3)=60;
a(2,4)=65; a(2,5)=40;
a(3,4)=52;a(3,7)=45;
a(4,5)=50; a(4,6)=30;a(4,7)=42;
a(5,6)=70;
a=a+a';a(find(a==0))=inf;
result=[];p=1;tb=2:length(a);
while length(result)~=length(a)-1
    temp=a(p,tb);temp=temp(:);
    d=min(temp);
    [jb,kb]=find(a(p,tb)==d);
    j=p(jb(1));k=tb(kb(1));
    result=[result,[j;k;d]];p=[p,k];tb(find(tb==k))=[];
end
result

2.1 Kruskal 算法构造最小生成树

科茹斯克尔(Kruskal)算法是一个好算法。Kruskal 算法如下:

树:连通性、最小生成树_第2张图片

例 14   用 Kruskal 算法构造例 3 的最小生成树。 我们用 \large index_{ \: 2× \times n}存放各边端点的信息,当选中某一边之后,就将此边对应的顶点序 号中较大序号u 改记为此边的另一序号v ,同时把后面边中所有序号为u 的改记为v 。

此方法的几何意义是:将序号u 的这个顶点收缩到v 顶点,u 顶点不复存在。后面继续 寻查时,发现某边的两个顶点序号相同时,认为已被收缩掉,失去了被选取的资格。 Matlab 程序如下:

clc;clear;
a(1,2)=50; a(1,3)=60; a(2,4)=65; a(2,5)=40;
a(3,4)=52;a(3,7)=45; a(4,5)=50; a(4,6)=30;
a(4,7)=42; a(5,6)=70;
[i,j,b]=find(a);
data=[i';j';b'];index=data(1:2,:);
loop=max(size(a))-1;
result=[];
while length(result)

图&网络系列博文:

【1】图与网络模型及方法:图与网络的基本概念

【2】图&网络模型应用—最短路径问题

【3】树:基本概念与最小生成树

【4】匹配问题: 匈牙利算法 、最优指派、相等子图

【5】Euler 图和 Hamilton 图

【6】计划评审方法和关键路线法【统筹方法】:广泛地用于系统分析和项 目管理

【7】最小费用流及其求法 :

【8】最大流问题  

【9】钢管订购和运输问题


 

你可能感兴趣的:(matlab数学建模)