Kruskal演算法構造最小生成樹

2021-10-03 08:52:34 字數 645 閱讀 3159

問題[描述演算法問題,首選形式化方式(數學語言),其次才是非形式化方式(日常語言)]

在一給定的無向圖g = (v, e) 中,(u, v) 代表連線頂點 u 與頂點 v 的邊(即),而 w(u, v) 代表此邊的權重,若存在 t 為 e 的子集(即)且為無向迴圈圖,使得的 sum(w(u, v))最小,則此 t 為 g 的最小生成樹。

解析[問題的理解和推導,可用電子版直接在此編寫,也可用紙筆推導,拍照嵌入本文件]

設計[核心偽**]

首先運用快排把邊按公升序分別排列好,然後再開始kruskal函式

void kruskal(edge e,int n,int e) 繼續下一條邊 } 最後輸出總和} 4. 分析[演算法複雜度推導]時間複雜度:nlogn kruskal演算法用於變數較少的稀疏圖

原始碼[github原始碼位址]

#include

typedef structedge;void kruskal(edge e,int n,int e) j++; //掃瞄下一條邊 } printf("%d\n",sum);}int fun(edge arr,int low,int high) { int key; edge lowx; lowx=arr[low]; key=arr[low].weight; while(low=key) high–; if(low

kruskal演算法構造最小生成樹

1.問題 假設g v,e 是連通的,te是g上最小生成樹中邊的集合。演算法從u u0 v te 開始。重複執行下列操作 每次找權值最小的邊,將連線兩條邊的頂點加入集合u中,構造最小生成樹。2.解析 1 圖中有6個頂點v1 v6,每條邊的邊權值都在圖上 由圖可知,v2 v3這條邊權值最小,所以選擇它為...

最小生成樹 kruskal(演算法)

最小生成樹 圖中有好多點呀 n個 讓我們找到n 1條邊,來把他們連上吧,但是要讓這n 1條邊的和最小。kruskal演算法 把所有邊由公升序排列,然後從最小的一條邊找起,如果這條邊的兩點不屬於乙個集合 此處運用並查集 那麼就要這條邊,否則,忽略這條邊吧 一直這樣找下去,直到找了n 1條邊為止,此時,...

最小生成樹 Kruskal演算法

1.概覽 kruskal演算法是一種用來尋找最小生成樹的演算法,由joseph kruskal在1956年發表。用來解決同樣問題的還有prim演算法和boruvka演算法等。三種演算法都是貪婪演算法的應用。和boruvka演算法不同的地方是,kruskal演算法在圖中存在相同權值的邊時也有效。2.演...