Prim算法求解过程 离散数学

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Prim 算法求解过程

一、算法用途:从某给定点开始,求解无向连通加权图G=(V , E, W)的最小生成树

T=(V T , E T , W T ). 二、算法步骤:

设G=(V , E, W)是无相连通加权图,|V|=n , |E|=m 。(要求从v1点开始求解)

Step 1. 令已经落在树中的点集V T ={v 1}, E T =Φ, 尚未落在树T 上的点集~V T =V-V T ; Step 2. 找集合V T 与~V T 之间的权最小的边e=(v i ,v j ),其中v i ∈V T , v j ∈~V T ;

令V T :=V T ∪{v j }, ~V T := ~V T -{v j }, E T :=E T ∪{e};

Step 3. 当V T =V , ~V T =Φ时,算法中止,即得到原图G 的一棵最小生成树,再计算

W T .

三、例题

求图1的最小生成树。 (从v1点开始)

[解] 解法过程一:图示法。 ① v 1

V T ={v 1}, ~V T =V -V T ={v 2, v 3, …, v 6}.

V T ={v 1,v 2}, ~V T ={v 3, …, v 6}.

7 5 1 2 v 1

v 3 v 5

v 6

4

1

2 3 6

图1

v 2

v 4

1v 2

V T ={v 1,v 2,v 3}, ~V T ={v 4,v 5,v 6}

V T ={v 1,v 2,v 3, v 5}, ~V T ={v 4,v 6} ⑤

V T ={v 1,v 2,v 3, v 5, v 4}, ~V T ={v 6}

V T ={v 1,v 2,v 3, v 5, v 4, v 6}=V , ~V T =Φ,算法中止。 所以,T 如上图所示且W T =9.

3

v 5

v 5

353v 4

v 6

v

v 12

v 4

3

T

(注:做此类题目时请选取上述两种过程中的一种规范书写。)

四、思考题:

1. 此算法的最终结果与起始点的选取有没有关系?

2. 起始点相同的情况下,最后结果(最小生成树和W T )会不会不同? (试从v 1开始求图2的最小生成树)

3. 算法中每一步加边时是否需要考虑避免与已经在T 中的边回路?为什么?

4. 此算法每一步都是选取V T 与~V T 两点集之间的边(即e=(v i ,v j ),v i ∈V T , v j ∈~V T )中权最小的边,而不是这一步新加入V T 的点的邻边中权最小的,否则得到的不是最小生成树(例如图2)。

v 2

v 2

v 2

v 2

v 2

1

1

2 2

3

1

3

5

图2

56 v v 4 v 2

五、Kruskal 算法与Prim 算法的区别:

D 氏算法求解过程

[例题]试求无向赋权图中v 1到v 6的最短路径。

解:D 氏算法的具体步骤如下表所示:

616

v 2 v 4

7 5 1

2 v 1

v 3 v 5

v 6

4

1

2

3 6

注:

1. “最短距离”表示在当前集合T 中的最短距离;

“最近距离点”为其相应的结点。 2. D(v i )表示各结点当前的标号

3. *表示新加入集合P 中的点。

4. 作业、测验题中若有求解最短路径问题时,请画出此表格表明求解过程。

思考题:

1. 最终完成此表后,如何找到从v 1出发到某点v i 的最短路径?

2. 若在算法过程中某一步出现了两个相等的最短距离值时,选取哪一个加入集合P ?

[提示]:可从以下两类问题考虑: (1) 求从v1出发到某点vi 的最短距离; (2) 求从v1出发到其它各点的最短距离。

Kruskal 算法(避圈法)求解过程

一、算法用途:求解无向连通加权图G=(V, E, W)的最小生成树T=(V T , E T , W T ). 二、算法步骤:

设G=(V, E, W)是无相连通加权图,|V|=n, |E|=m 。不妨设G 中没有环, 否则把所有的环先去掉。

Step 1. 按照边权从小到大的关系,将m 条边排序:e 1, e 2, ..., e m ;

Step 2. 取e 1∈E T ,然后依次检查e 2, e 3, …, e m . 若e j (j ≥2)与已经在T 中的边

不构成回路,则取e j ∈E T ,否则就舍弃e j ;

Step 3. 当V T =V (或|E T |=n-1,或加入任何一条边都产生回路)时,算法中止,即得到原

图G 的一棵最小生成树,再计算W T 。 三、例题

求此无向连通加权图的最小生成树。

[解] 对图中各边的权进行从小到大排序:

e 1=(v 1,v 2), e 2=(v 3,v 4), e 3=(v 2,v 3), e 4=(v 4,v 6), e 5=(v 4,v 5), e 6=(v 1,v 3), e 7=(v 2,v 5), e 8=(v 5,v 6) e 9=(v 2,v 4)

则由Kruskal 算法,最小生成树的边集合的序列为:

7

5 1 2

v 1 v 3 v 5

v 6 4

1 2 3

6 v 2 v 4

v 2

相关文档
最新文档