並查集資料結構的幾種實現

2022-05-04 03:36:13 字數 1029 閱讀 8304

第一種實現

每乙個節點都只是指向根節點

find是 常數時間複雜度的, union是 線性時間複雜度的。

class

quickfind

count =n;

} boolean connected(int p , int

q)

int find (int

p)

void union(int p , int

q)

for (int i = 0; i < a.length; i++)

}count--;

}}

第二種實現

每乙個節點指向乙個和自己在相同集合中的節點

find操作是樹的高度時間複雜度,union操作也是 樹的高度時間複雜度

class

quickunion

count =n;

} void

find(p)

void union(int p, int

q) a[proot] =qroot;

count--;

} void connected(int p, int

q) }

第三種實現其實是第二種實現的改良版本

因為第二種實現,當樹的高度比較大,趨於鍊錶的時候,時間複雜度會比較高,應該盡量減小樹的高度

find時間複雜度logn,union時間複雜度logn

class

quickunion2

count =n;

} void

find(p)

void union(int p, int

q)

if (size[proot] else

count--;

} void connected(int p, int

q) }

使用場景,比如 島嶼個數 問題,除了用深度優先搜尋之外,還可以用 並查集資料結構來做。

資料結構與演算法 並查集陣列實現

在一些有n個元素的集合應用問題中,我們通常是在開始時讓每個元素構成乙個單元素的集合,然後按一定順序將屬於同一組的元素所在的集合合併,其間要反覆查詢乙個元素在哪個集合中。並查集是一種樹型的資料結構,用於處理一些不相交集合 disjoint sets 的合併及查詢問題。常常在使用中以森林來表示。主要涉及...

資料結構 並查集

並查集,顧名思義,合併 查詢 集合 並查集是一種樹型的資料結構,用於處理一些不相交集合 disjoint sets 的合併及查詢問題。常常在使用中以森林來表示。對於概念等等的這裡不再贅述,直接講解應用。應用1 判斷圖中有多少聯通分量 或者圖是否聯通 聯通分量 1 hdu 1213 應用2 判斷圖是否...

資料結構 並查集

time limit 1000ms memory limit 65536k 某城市有n個人,現在給定關於n個人的m條資訊,m條資訊是兩個人在同乙個小區,根據所給資訊,判斷這個城市最多可能有多少個小區。n個人編號為1 n。多組輸入。每組第一行有兩個整數n,m 2 n 50000,0 m n 2 接下來...