把一个连通无向图的生成树边按权值递增排序,称排好序的边权列表为有序边权列表,则任意两棵
最小生成树的有序边权列表是相同的。(算法导论23.1-8)
证: 设最小生成树有n条边,任意两棵最小生成树分别称为A, B, 如果e是一条边,用w(e)表示该边
的权值。
A的边按权值递增排序后为a
1
, a
2
,
……
a
n
w(a
1
)≤w(a
2
)≤
……
w(a
n
)
B的边按权值递增排序后为b
1
, b
2
,
……
b
n
w(b
1
)≤w(b
2
)≤
……
w(b
n
)
设i是两个边列表中,第一次出现不同边的位置,a
i
≠b
i
不妨设w(a
i
)≥w(b
i
)
情形1 如果树A中包含边b
i
,则一定有j>i使得 b
i
=a
j
,事实上,这时有 w(b
i
)=w(a
j
)≥w(a
i
)
≥w(b
i
) 故 w(b
i
)=w(a
j
)=w(a
i
),在树A的边列表中交换边a
i
和 a
j
的位置并不会影响树A的边权有序
列表,两棵树在第i个位置的边变成同一条边。
情形2 树A中并不包含边b
i
,则把b
i
加到树A上,形成一个圈,由于A是最小生成树,这个圈里任意
一条边的权值都不大于w(b
i
) ,另外,这个圈里存在边a
j
不在树B中。因此,有w(a
j
)≤w(b
i
),且
j>i (因为a
j
不在B中)。于是,有w(b
i
)≤w(a
i
)≤w(a
j
)≤w(b
i
),因此
w(a
i
)= w(a
j
) = w(b
i
)。那么在树A中把a
j
换成b
i
仍然保持它是一棵最小生成树,并不会影响树A的
边权有序列表,并且转换成情形1。