首页 | 主题 | 图库 | 问答 | 文摘 | 原创 | 百科

历史 | 地理 | 人物 | 艺术 | 体育 | 科学 | 音乐 | 电影 | 信息技术 | 世界遗产

 开放、中立,源自维基百科

个人工具


最小生成树

维库,知识与思想的自由文库

跳转到: 导航, 搜索

在一給定的無向圖 G = (V, E) 中,(u, v) 代表連接頂點 u 與頂點 v 的邊(即 (u, v)\in E),而 w(u, v) 代表此的權重,若存在 T 為 E 的子集(即 T\subseteq E)且為無循環圖,使得

w(T) = \sum_{(u,v)\in T} w(u,v)

的 w(T) 最小,則此 T 為 G 的最小生成樹

最小生成樹其實是最小權重生成樹的簡稱。

以有線電視電纜的架設為例,若只能沿著街道佈線,則以街道為邊,而路口為頂點,其中必然有一最小生成樹能使佈線成本最低。

[编辑] 性質

  • 最小生成樹的邊數必然是頂點數減一,|E| = |V| - 1。
  • 最小生成樹不可以有循環。
  • 最小生成樹不必是唯一的。

[编辑] 演算法

Prim演算法Kruskal演算法是尋找最小生成樹的經典方法,兩者皆為貪心法,通常使用二元堆積,時間複雜度為 O(ElgV)。若使用Fibonacci堆,Prim演算法可加速至 O(E + VlgV)

[编辑] 安全邊

Prim演算法Kruskal演算法使用贪心法時有著相似的思維:一次「生成」一條「安全邊」,如下所示:

GENERIC-MST-FUNCTION (G,w)
1    T := 空集合
2    while T 還不是生成樹
3        do 找出對 T 來說是「安全」的邊 (u, v)
4            T := T U {(u, v)}
5    return T


電腦小作品 这是一个与计算机相关的小作品,您可以帮助维库扩充其内容。
其它语言
AD Links