並查集 QuickFind實現

2021-10-01 15:37:35 字數 882 閱讀 8815

1 並查集的意義

判斷連通性問題

初始化每個元素都是不同集合

判斷兩個點是否連通,檢視是否在同乙個集合中即可

2 quickfinduf實現

顧名思義,查詢非常快,用陣列來儲存,每個索引對應的是集合的編號

/**

* @author created by qiyei2015 on 2019/12/11.

* @version: 1.0

* @email: [email protected]

* @description: 快速查詢的並查集

* 用陣列來儲存,每個索引對應的是集合的編號

*/public class quickfinduf implements uf

}@override

public int size()

/*** 時間複雜度o(n)

* @param p

* @param q

*/@override

public void union(int p, int q)

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

@override

public boolean connected(int p, int q)

/*** 找到元素所p在集合編號

* @param p

* @return

*/private int find(int p)

return id[p];

}}

這種並查集的union操作時間複雜度是o(n),因此一般不採用這種實現,後續會介紹快速連線的並查集及其優化過程

並查集 並查集

本文參考了 挑戰程式設計競賽 和jennica的github題解 陣列版 int parent max n int rank max n void init int n int find int x else void union int x,int y else 結構體版 struct node ...

java實現並查集

並查集是根據這篇博文學習的,寫得很不錯 下面是實現 public class unionfindset count n 合併p,q所在集合 param p param q public void union int p,int q if size rootp size rootq else coun...

C 實現並查集

將n個不同的元素分成一組不相交的集合。開始時,每個元素就是乙個集合,然後按規律將兩個集合進行合併。假如已知有n個人和m對好友關係 存於陣列r 如果兩個人是直接的或間接的好友關係 好友的好友的好友.則認為他們屬於同一好友圈,請求出這n個人中有幾個好友圈。例如 n 5,m 3,r 表示有5個人,1和2是...