並查集概述
並查集是一種常用的算法,其主要是一種將相關元素放入同一集合的思想。
並查集的使用中主要有兩個步驟:合併、查找。
- 合併:將相關元素合併,底層實現主要爲數組或哈希表,將相關元素的根結點指向同一節點。
- 查找:查找兩個元素是否在同一集合,查找其根結點是否相同即可。
類似於上圖中的“門派”劃分,在同一門派下即處於相同集合。
並查集優化
1. 路徑壓縮
減少並查集存儲節點時的樹形結構的高度,更改節點的指向,減少查找時間
方法一 隔代壓縮
原理如下圖所示:
實現代碼:parent[index] = parent[parent[index]];
方法二 完全壓縮
原理如下圖所示:
需要利用遞歸實現。
2. 按秩合併
秩一般代表樹的高度。
合併時根據秩,將秩小的樹的根結點指向秩大的樹的根結點,以避免合併後樹的高度增加。
並查集使用
在最小生成樹Kruskal方法中可使用並查集。
在部分編程題目比如No.990 LeetCode題目 “等式方程的可滿足性”中也可以應用。
參考
本文部分參考: