Prim算法求解过程 离散数学
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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