演算法 並查集(四種方式)

2021-09-23 17:04:27 字數 1528 閱讀 7705

簡單並查集

public class unionfind 

public int getcount()

public boolean connected(int p, int q)

public int find(int p)

public void union(int p, int q)

}

快速並查集

public class quickunion 

public int getcount()

public boolean connected(int p, int q)

public int find(int p)

public void union(int p, int q)

}

加權快速並查集

public class weightedquickunion 

}public int getcount()

public boolean connected(int p, int q)

public int find(int p)

public void union(int p, int q)

else

count--;

}

路徑壓縮的加權快速並查集

public class pathcompressionweightedquickunion 

}public int getcount()

public boolean connected(int p, int q)

public int find(int p)

public void union(int p, int q)

else

count--;

}}

複雜度對比

存在n夥強盜增長數量級(最壞情況)

演算法 建構函式 union() find()

union-find演算法 o(n) o(n) o(1)

quick-union演算法 o(n) 樹的高度 樹的高度

加權quick-union演算法 o(n) o(lgn) o(lgn)

路徑壓縮的加權quick-union演算法 o(n) 非常接近o(1) 非常接近o(1)

理想情況 o(n) o(1) o(1)

並查集演算法

所謂並查集,它是乙個集合,這個集合的元素也是集合,他支援三種操作 makeset x 建立乙個只有乙個元素x的集合x0,將這個集合放入並查集中 findset x 在並查集中尋找乙個元素s 注意並查集的元素s也是集合 滿足 x屬於s union x,y 將並查集中的元素s1,s2合併,其中x屬於s1...

並查集演算法

並查集是一種樹型的資料結構,用於處理一些不相交集合 disjoint sets 的合併及查詢問題。常常在使用中以森林來表示。讓每個元素構成乙個單元素的集合,也就是按一定順序將屬於同一組的元素所在的集合合併。1 makeset s 建立乙個新的並查集,包含s個單元素集合。2 union x,y 把x ...

並查集演算法

includeint pre 10 int find int x 查詢祖先節點 int i x,j while i r 壓縮路徑 return r void join int x,int y int main 2 食物鏈問題 description 動物王國中有三類動物a,b,c,這三類動物的食物鏈...