採用了啟發式策略,按秩合併和路徑壓縮技術。
/// @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 的集合合併為乙個新的集...