演算法分析與設計 work1

2022-06-26 23:42:17 字數 1062 閱讀 8683

給出由 \(n\) 個點, \(m\) 條邊構成的一幅無向圖,分別用prim演算法和kruskal演算法構造一棵最小生成樹。

prim演算法:

從任意乙個頂點開始生成最小生成樹,每次選擇和當前已經構成的樹的最小邊,把最小邊連線的頂點加入到樹中,直到所有頂點都被加入。

圖示:

kruskal演算法:

先對所有邊按公升序進行排序,然後從小到大遍歷所有邊,如果這條邊連線的兩個點不聯通,則加入這條邊,直到用n-1條邊構成一棵樹。在判斷點是否連通可以用並查集維護。

圖示:

偽**:

prim演算法:

t = 

enqueue edges connected to s in pq (by inc weight)

while (!pq.isempty), enqueue edges connected to v

}else

}mst = t

kruskal演算法:

sort e edges by increasing weight

t = {}

for (i = 0; i < edgelist.length; i++)else

}mst = t

prim演算法:

prim演算法在遍歷 \(n\) 個點時,每次需要遍歷和當前樹沒有連通的邊,時間時間複雜度 \(o(n^2)\)。

kruskal演算法:

kruskal演算法首先需要排序,時間複雜度 \(o(nlogn)\) ,然後從小到**邊,其中用來判斷是否連通的並查集演算法,時間複雜度 \(o(logn)\) ,選取完 \(n-1\) 條邊最壞情況時遍歷 \(m\) 次,總時間複雜度 \(o(nlogn)\) 。

演算法設計與分析 1

實驗題目 生成兩個隨機的圖,乙個有向圖乙個無向圖。有向圖兩千條邊左右,無向圖一千條邊左右,邊的數量是大概的。100個頂點。要求能算出每個頂點的度。要求每次圖是隨機生成的,並且有良好的結構。今後的實驗都基於這個圖結構。任意語言和環境。建議鍊錶描述。然後基於這個圖實現乙個廣度優先搜尋。參考文獻 c 中的...

演算法設計與分析作業(1)

1.dijkstra求單源最短路徑 先進行存圖操作,將帶權有向圖用鄰接矩陣來表示 for int i 0 i u v dist map u v dist 用dis陣列來儲存0點到其他每乙個點的最短距離,初始時dis i map 0 i 接下來進行鬆弛操作,找出最短距離 首先0點為q集合中的點,0 1...

演算法設計與分析 實驗1

一 實驗目的和要求 理解分治法的演算法思想,閱讀實現書上已有的部分程式 並完善程式,加深對分治法的演算法原理及實現過程的理解。二 實驗環境 實驗裝置 code blocks13.12 三 實驗原理及內容 一 用分治法實現一組無序序列的兩路合併排序和快速排序。要求清楚合併排序及快速排 序的基本原理,程...