Python 經(jīng)典貪心算法之Prim算法案例詳解
最小生成樹的Prim算法也是貪心算法的一大經(jīng)典應(yīng)用。Prim算法的特點是時刻維護一棵樹,算法不斷加邊,加的過程始終是一棵樹。
一條邊一條邊地加, 維護一棵樹。
循環(huán)(n – 1)次,每次選擇一條邊(v1,v2), 滿足:v1屬于V , v2不屬于V。且(v1,v2)權(quán)值最小。
E = E + (v1,v2)
V = V + v2
Prim算法的過程從A開始 V = {A}, E = {}
選中邊AF , V = {A, F}, E = {(A,F)}
選中邊FB, V = {A, F, B}, E = {(A,F), (F,B)}
選中邊BD, V = {A, B, F, D}, E = {(A,F), (F,B), (B,D)}
選中邊DE, V = {A, B, F, D, E}, E = {(A,F), (F,B), (B,D), (D,E)}
選中邊BC, V = {A, B, F, D, E, c}, E = {(A,F), (F,B), (B,D), (D,E), (B,C)}, 算法結(jié)束。
我們考慮f和e的邊權(quán)w(f)與w(e)的關(guān)系: 若w(f) > w(e),在T中用e換掉f (T中加上e去掉f),得到一個權(quán)值和更小的生成樹,與T是最小生成樹矛盾。
若w(f) < w(e), Prim算法在第K步時應(yīng)該考慮加邊f(xié),而不是e,矛盾。
請仔細理解Prim算法——時刻維護一棵生成樹。我們的證明構(gòu)造性地證明了所有地最小生成樹地邊權(quán)(多重)集合都相同!
最后,我們來提供輸入輸出數(shù)據(jù),由你來寫一段程序,實現(xiàn)這個算法,只有寫出了正確的程序,才能繼續(xù)后面的課程。
第1行:2個數(shù)N,M中間用空格分隔,N為點的數(shù)量,M為邊的數(shù)量。(2 <= N <= 1000, 1 <= M <= 50000) 第2 - M + 1行:每行3個數(shù)S E W,分別表示M條邊的2個頂點及權(quán)值。(1 <= S, E <= N,1 <= W <= 10000)
輸出最小生成樹的所有邊的權(quán)值之和。
9 14
1 2 4
2 3 8
3 4 7
4 5 9
5 6 10
6 7 2
7 8 1
8 9 7
2 8 11
3 9 2
7 9 6
3 6 4
4 6 14
1 8 8
輸出示例
37
maxv=10001 n,m=list(map(int,input().split())) E=[] V=set([1]) cost=[] for i in range(n+1): a=[] for j in range(n+1): a.append(maxv) cost.append(a) for i in range(m): s,e,w=list(map(int,input().split())) cost[s][e]=w cost[e][s]=w closet=[0] lowcost=[maxv] for i in range(1,n+1): closet.append(1) lowcost.append(cost[1][i]) ans=0 for i in range(n-1): k=0 for j in range(2,n+1): if (lowcost[j]!=0) and (lowcost[j]<lowcost[k]):k=j for j in range(2,n+1): if cost[j][k]<lowcost[j]: lowcost[j]=cost[j][k] closet[j]=k ans+=lowcost[k] lowcost[k]=0 print(ans)
到此這篇關(guān)于Python 經(jīng)典貪心算法之Prim算法案例詳解的文章就介紹到這了,更多相關(guān)Python 經(jīng)典貪心算法之Prim內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
TensorFlow進階學(xué)習定制模型和訓(xùn)練算法
本文將為你提供關(guān)于 TensorFlow 的中級知識,你將學(xué)習如何通過子類化構(gòu)建自定義的神經(jīng)網(wǎng)絡(luò)層,以及如何自定義訓(xùn)練算法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-07-07解決TensorFlow GPU版出現(xiàn)OOM錯誤的問題
今天小編就為大家分享一篇解決TensorFlow GPU版出現(xiàn)OOM錯誤的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02解決Python下json.loads()中文字符出錯的問題
今天小編就為大家分享一篇解決Python下json.loads()中文字符出錯的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-12-12詳解Python安裝tesserocr遇到的各種問題及解決辦法
這篇文章主要介紹了詳解Python安裝tesserocr遇到的各種問題及解決辦法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧2019-03-03Python常用內(nèi)置函數(shù)和關(guān)鍵字使用詳解
在Python中有許許多多的內(nèi)置函數(shù)和關(guān)鍵字,它們是我們?nèi)粘V薪?jīng)??梢允褂玫牡降囊恍┗A(chǔ)的工具,可以方便我們的工作。本文將詳細講解他們的使用方法,需要的可以參考一下2022-05-05