1.問題
(1)舉乙個例項,畫出採用prim演算法構造最小生成樹的過程,並編寫演算法。
(2)舉乙個例項,畫出採用kruskal演算法構造最小生成樹的過程,並編寫演算法。
2.解析
定義無向加權圖的生成樹代價為樹中所有邊的代價(權值)之和。最小代價生成樹是具有最小代價的生成樹。求無向連通圖的最小代價生成樹,這裡分別應用prim演算法、kruskal演算法,這兩種演算法的設計技術都屬於貪心法。用貪心法求解優化問題,最優解是在一系列求解步驟的最後得出的,每一步求解都在當前所有可能的選取中(按某種判據)做最優選取。對於最小代價生成樹問題,目標判據為最小代價,應滿足如下限定:
(1)只選圖**現的邊;
(2)只選n-1條邊;
(3)不選構成環路的邊。
prim演算法:
任意選定開始節點可。選一條最小代價的邊(u,v)加入t,使t∪還是棵樹,重複這樣的選邊以及插入過程,直到t中包括n-1條邊為止。
畫出最小生成樹的過程例項:
kruskal演算法:
構造最小代價生成樹t的 kruskal演算法。邊按權值非遞減的順序每一次向t中加入一條邊,保證每次加入的邊都不構成環路。
畫出最小生成樹的過程例項:
3.設計
(1)prim演算法:
(2)kruskal演算法:
演算法分析第一次作業
1.問題 有乙個連通圖 圖中有n個點,編號為1到n 圖中有m條無向邊,格式為a b l 表示a與b之間有一條長為l的邊 沒有重邊,沒有自環,所有點都相互連通 求圖的一棵最小生成樹 2.解析 圖的最小生成樹即花費最少路徑長度將圖中所有點連通 有兩種演算法有優秀的時間複雜度解決這類問題 一種是prim演...
演算法第一次作業
命名 命名,包括檔名 類名 結構名 型別名 函式名 變數名 引數名等都是程式設計中重要的一部分。乙個好的名稱,體現了乙個深思熟慮的過程,同時也 能夠幫助別人更好地理解開發者的思路。如果發現程式中,充滿了a,b,c,x,y,z,tmp這種命名的變數,這時候就需要仔細的考慮自己的實現是否有問題。類 結構...
系統分析與設計第一次作業
軟體工程是 1 應用系統的,規範的,可量化的方法來開發,操作和維護軟體,即將工程上的方法應用到軟體 開發 上 2 除此之外,對於 1 中提到的方法的研究,也計入軟體工程範疇 軟體危機是指在計算機軟體的開發和維護過程中所遇到的一系列嚴重問題。和其它事務一樣,乙個軟體產品或者軟體系統也要經歷孕育 誕生 ...