证明:
有无向图
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,…,etn−1}.
(最优子结构):
不失一般性,令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为最小生成树矛盾。所以最优子结构成立。