JAVA資料結構之並查集 最終版

2021-08-26 08:18:48 字數 751 閱讀 5418

介面

public

inte***ce uf

public

class

unionfindv6

implements

uf }

@override

public

intgetsize()

//查詢過程,查詢元素p所對應的的集合編號

//o(h)複雜度,h為樹的高度

//這裡用遞迴,需要返回值的 int

//最後樹只有兩層

private

intfind(int p)

//****路徑壓縮

if (p != parent[p])

return parent[p];

} @override

public

boolean

isconnected(int p, int q)

@override

public

void

unionelements(int p, int q)

// 根據兩個元素所在數的rank不同判斷合併方向 【這裡的rank指深度】

// 將rank低的集合合併到rank高的集合上

if (rank[proot] < rank[qroot]) else

if (rank[proot] > rank[qroot]) else

}}

資料結構之並查集

並查集 union find sets 是一種簡單的用途廣泛的集合.並查集是若干個不相交集合,能夠實現較快的合併和判斷元素所在集合的操作,應用很多,如其求無向圖的連通分量個數 最小公共祖先 帶限制的作業排序,還有最完美的應用 實現kruskar演算法求最小生成樹。其實,這一部分 演算法導論 講的很精...

資料結構之並查集

覺得很不錯的參考資料引用一下 陣列實現 合併操作代價高,可達o n 2 鍊錶實現 樹結構實現 查詢與合併的平均時間複雜度為o log 2 n 與樹的深度有關,優化 降低時間複雜度 按秩合併 若h b h b,則將b樹作為a樹的子樹。帶路徑壓縮的查詢演算法 改變結點所指方向以減小深度,查詢路徑時 走兩...

資料結構之並查集

1.將兩個集合合併。2.詢問兩個元素是否在乙個集合當中。複雜度近乎o 1 基本原理 每個集合用一棵樹來表示。樹根的編號就是整個集合的編號。每個節點儲存它的父節點,p x 表示x的父節點。問題1 如何判斷樹根 if p x x 問題2 如何求x的集合編號 while p x x x p x 問題3 如...