演算法合集 並查集union find

2021-07-24 05:23:36 字數 978 閱讀 1076

並查集演算法主要分為quic-find, quick-union以及union-find方法。但出於效率考慮,一般使用union-find演算法進行實際操作。

union-find演算法的思想就是利用乙個陣列id記錄每個節點的父節點,例如現要將節點1(id[1] = 1)連線到節點2(id[2] = 2),則令id[1] = 2即可;同時,若節點為根節點,則令其id值等於其自身。通過這種方式,可將序列轉化為由許多樹組成的森林,若要判斷兩節點是否連通,只需比較二者根節點是否相同即可。

但為了進一步演算法效率,我們還可以再建立乙個陣列sz來記錄每棵樹的大小,使得在將兩棵樹歸併時只會將小樹連線到大樹上,從而盡可能減小最終結果中樹的高度,進一步優化演算法。

以下就是我用c++實現的union-find的**:

#ifndef union_find_h

#define union_find_h

class union_find

; int _num() ;

bool connected(int p, int q) ; //判斷是否聯通

int _find(int p); //尋找根節點

void _union(int p, int q); //連線兩棵樹

};#endif

#include "union_find.h"

union_find::union_find(int n)

}int union_find::_find(int p)

void union_find::_union(int p, int q)

else

}num--; //分量數減一

}

並查集詳解 例題合集

擒賊先擒王 解密犯罪團夥 沒錯,就是他們,為了下層勞動階級的利益開始擾亂朝廷治安了。雖然他們是一家人,但是這些好漢們分成了許多隊伍分開出動,我們需要做的是確定他們分成了多少個隊伍。我們先來了解一下並查集 並查集,並查集是一種樹形結構,又叫 不相交集合 保持了一組不相交的動態集合,每個集合通過乙個代表...

並查集演算法

所謂並查集,它是乙個集合,這個集合的元素也是集合,他支援三種操作 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 ...