演算法簡介
並查集實際上就是並集和查集的過程.集(集合)可以理解為一棵樹,即乙個根結點連著無數個子節點.並查集也稱為不相交集資料結構.形象地來說,有點像"朋友圈":a和b是朋友,a和b就構成了乙個朋友圈,c和d是朋友,c和d也構成了乙個朋友圈,那麼這時,如果b和c在成為了朋友,a、b、c、d就構成了乙個大的朋友圈.
並查集通過乙個一維陣列來實現,其本質是維護乙個森林.剛開始的時候,森林的每個點都是孤立的,也可以理解為每個點就是一棵只有乙個結點的樹,之後通過一些條件,逐漸將這些樹合併成一棵大樹.其實合併的過程就是"認爹"的過程.在"認爹"的過程中,要遵守"靠左"原則和"擒賊先擒王"原則.在每次判斷兩個結點是否已經在同一棵樹中的時候(一棵樹其實就是乙個集合).也要注意必須求其根源,中間父親結點(「小boss」)是不能說明問題的,必須找到其祖宗(樹的根結點),判斷兩個結點的祖宗是否是同乙個根結點才行.
並查集
並查集演算法
所謂並查集,它是乙個集合,這個集合的元素也是集合,他支援三種操作 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 ...
並查集演算法
includeint pre 10 int find int x 查詢祖先節點 int i x,j while i r 壓縮路徑 return r void join int x,int y int main 2 食物鏈問題 description 動物王國中有三類動物a,b,c,這三類動物的食物鏈...