1. 程式人生 > 其它 >【筆記】並查集兩種優化方式:路徑壓縮與按秩合併

【筆記】並查集兩種優化方式:路徑壓縮與按秩合併

技術標籤:演算法筆記c++演算法

  • 路徑壓縮

    將所有連通節點掛在同一個根節點上,相當於把一顆高度大於2的樹壓縮為高度為2的樹。
    int find(vector<int> &parents, int index) {
       	if(parents[index] != index) {
            parents[index] = find(parents, parents[index]);
       	}
       	return parents[index];
    }
    
  • 按秩合併

    將秩小的樹合併到秩大的樹上,秩可以是樹的深度,也可以是樹的大小。
    void Union(vector<
    int> &parents, int index1, int index2, vector<int> &r) { int x = find(parents, index1); int y = find(parents, index2); if(x == y) return; if(r[x] < r[y]) swap(x, y); parents[y] = x; r[x] += r[y]; }