假設要在n個城市之間建立通訊聯絡網,則連通n個城市需要n-1條線路。在這種情況下,我們自然需要考慮乙個問題,如何在最節省經費的條件下建立這個網路?
很自然地我們會想到,將各個城市之間的線路開銷轉化為權重,要想找到最節省經費的方案,就需要找到能夠連通所有城市且權重最小的連通線路。
因此,我們需要選擇一顆生成樹,使得該生成樹總耗費最小,也就是用最小的代價構建這條連通網。我們稱這樣的網路為:最小代價生成樹(簡稱:最小生成樹)。
本文從mst性質的定義和證明方面為讀者解度最小生成樹兩個常見演算法的前置理論性質。
普里姆(prim)演算法和克魯斯卡爾(kruskal)演算法都是利用了mst性質的演算法
建議讀者在在理解了普里姆(prim)演算法和克魯斯卡爾(kruskal)演算法之後再閱讀此文
利用得到的最小生成樹在回過頭來理解mst會更加簡單。
假設n=(v,)是乙個連通網,u是頂點集v的乙個非空子集。
若(u,v)是一條既有最小權值(代價)的邊,其中u∈u,v∈v,則必存在一顆包含邊(u,v)的最小生成樹。
可以用反證法證明。假設網n的任何一顆最小生成樹都不包含(u,v)。設t是連通網上的一顆最小生成樹,當將邊(u,v)加入到t中時,由生成樹的定義,t中必存在一條包含(u,v)的迴路。
另一方面,由於t是生成樹,則在t上必存在另外一條(u',v'),其中u'∈u,v'∈v-u,且u與u',v與v'均有路徑相通。
刪去邊(u',v')即可消除上述迴路,同時得到另外一顆生成樹t'。因為(u,v)的代價不高於(u'v'),則t'的代價亦不高於t,t'是一顆包含(u,v)的最小生成樹。與假設假設矛盾。
現在,給出乙個連通圖:
眾所周知,這樣一給連通網的最小生成樹為:
那麼可以按照如下方式對mst進行證明:
MST性質的證明
什麼是mst?mst就是most small tree,應該就是最小生成樹的意思吧,具體不是很清楚,mst性質就是最小生成樹性質 以下簡稱mst性質 我們在看最小生成樹的演算法的時候,很多情況下都有關於這條性質的說明,比如,歷史上最經典的prim演算法和kruskal演算法就是根據這個性質演算出來的...
RB tree性質理解
每個節點的顏色非紅即黑。根節點的顏色必定為黑。每個葉子節點是黑色的 指的是nil節點 如果節點的顏色為紅,其左右子節點的顏色必為黑。任意節點到null 尾節點 的任意路徑上包含的黑色節點數量必須一致。根據以上規則,可以得出以下要求 為了能達到以上的要求,需要對變化後的紅黑樹進行調整。調整的手段主要有...
帶你理解Xcode Derived Data
什麼是xcode derived data?為什麼它很重要呢?clean derived data 當你遇到一些極其奇怪的構建問題時,你也許經常聽到這句話。derived data是乙個資料夾,它預設情況下位於 library developer xcode deriveddata。它是xcode儲...