1. 程式人生 > >並查集-Java實現

並查集-Java實現

**並查集** 借鑑百度百科的解釋,並查集就是在一些有N個元素的集合問題中,開始的時候讓每個元素成為自己的集合,然後按照一定的順序將屬於同一組的元素所在的集合進行合併(合併的是集合),在合併的期間需要方法查詢元素所在的集合。並查集的原理比較簡單,解決的問題的特點是看似並不複雜,但資料量極大。例如:圖的連通子圖問題,一個圖裡面有幾個連通子圖,判斷這幅圖是否連通等。若用正常的資料結構來描述,往往時空複雜度會過高。並查集是一種樹形資料結構,用於處理一些不相交集合的合併和查詢問題。並查集的原理就是朋友的朋友就是我的朋友。 **基本** 正如名字表達的那樣,並查集需要合併和查詢集合,所以並查集一般需要一個數組和兩個函式:int[] parent, int find(int element)和void unionElements(int firstOne, int secondOne)。 parent陣列用來記錄每個元素的前導點,也就是確定該元素所在的集合id;find函式用來查詢某元素所在的集合id;unionElements用來合併不同的集合。其基本過程如下圖所示。 ![](https://img2020.cnblogs.com/blog/2116398/202011/2116398-20201128162109935-1009075332.png) 實現程式碼: ``` public class UnionFind1 { private int[] id; //儲存元素的root private int size; //並查集大小 //構建新的並查集 public UnionFind1(int size) { this.size = size; id = new int[size]; for (in