並查集的森林封裝

2021-06-19 04:01:48 字數 642 閱讀 2637

採用了啟發式策略,按秩合併和路徑壓縮技術。

/// @file        disjoint_set_forest.h

/// @brief 並查集

#include #include using namespace std;

namespace algo

};//建立乙個集合 make-set

static disjointsetnode* makeset(int const &item)

//查詢所屬集合的操作:find-set 使用了路徑壓縮

static disjointsetnode* findset(disjointsetnode *a_set)

return a_set->parent;

} //合併操作 union

static void union(disjointsetnode* x, disjointsetnode* y)

private:

static void _link(disjointsetnode* x, disjointsetnode* y)

else

//按秩合併

if(x->rank == y->rank)

}};}

C 並查集 森林實現

使用森林儲存集合之間的關係,屬於同一集合的不同元素,都有乙個相同的根節點,代表著這個集合。當進行查詢某元素屬於哪個集合時,即遍歷該元素到根節點,返回根節點所代表的集合 遍歷過程中使用路徑壓縮的優化演算法,使整體樹的形狀更加扁平,從而優化查詢的時間複雜度。當進行合併時,即將兩顆子樹合併為一棵樹,將一棵...

樹的應用 森林 並查集

並查集屬於不相交的資料結構,可以用乙個根節點代表整棵樹來進行判斷,並查集的核心簡化步驟有乙個就是在構建樹的時候應用了路徑壓縮 以便之後查詢的時候速度更加快捷 以下貼出例題原始碼,並在原始碼中講解並查集的四個模板函式 include iostream include cstdio using name...

十 森林與並查集 1 什麼是並查集

摘自計蒜客 在電腦科學中,並查集 merge find set 也被稱為不相交集合 disjoint set 是用於解決若干的不相交集合的如下幾種操作的統稱 make set x 即初始化操作,建立乙個只包含元素 x 的集合。union x,y 即合併操作,將包含 x 和 y 的集合合併為乙個新的集...