Prim算法的最优子结构

证明:
有无向图 G = ( V , E ) G =(\mathbf V, \mathbf E ) G=(V,E),其中 V = { v 1 , v 2 , … , v n } \mathbf V=\{ v_1,v_2,\dots,v_n\} V={ v1,v2,,vn} E = { e 1 , e 2 , … , e m } \mathbf E=\{ e_1,e_2,\dots,e_m\} E={ e1,e2,,em}.其生成树为 G ′ = ( V , E ′ ) G^{'} =(\mathbf V, \mathbf E^{'} ) G=(V,E),其中 E ′ = { e t 1 , e t 2 , … , e t n − 1 } \mathbf E^{'}=\{ e_{t_1},e_{t_2},\dots,e_{t_n-1}\} E={ et1,et2,,etn1}.
(最优子结构):
不失一般性,令prim算法指定的初始节点为 v 1 v_1 v1,图 G G G有某棵最小生成树 T T T,其中与 v 1 v_1 v1相连且边权值最小的节点为 v a v_a va,对应的边为 e 1 a = ( v 1 , v a ) e_{1a}=(v_1,v_a) e1a=(v1,va)。将 G G G T T T v 1 v_1 v1 v a v_a va合并为新的顶点 v c v_c vc,删除边 e 1 a e_{1a} e1a,且对于同时与 v 1 v_1 v1 v a v_a va相连的节点,保留权值最小的边与 v c v_c vc相连后得到 G 1 G_1 G1 T 1 T_1 T1。现需证明 T 1 T_1 T1 G 1 G_1 G1的最小生成树。
T 1 T_1 T1不是 G 1 G_1 G1的最小生成树,则存在 T 2 T_2 T2 G 1 G_1 G1的最小生成树,有 W ( T 2 ) < W ( T 1 ) W(T_2)<W(T_1) W(T2)<W(T1)。将 T 2 T_2 T2 T 1 T_1 T1中的 v c v_c vc节点恢复为 v 1 v_1 v1 v a v_a va节点,则有 W ( T 2 ) + W ( e 1 a ) < W ( T 1 ) + W ( e 1 a ) = W ( T ) W(T_2)+W(e_{1a})<W(T_1)+W(e_{1a})=W(T) W(T2)+W(e1a)<W(T1)+W(e1a)=W(T) T T T为最小生成树矛盾。所以最优子结构成立。

猜你喜欢

转载自blog.csdn.net/qq_40206924/article/details/129844976