並查集(union-find)算法理解

在圖像處理中,往往會遇到連通域判斷的情況,而在處理過程中往往是利用並查集(union-find)算法。
並查集(Union-Find)是解決動態連通性問題的一類非常高效的數據結構。並查集主要分爲兩個過程;1、查,2、並。查主要目的是查找滿足聯通的點,並主要目的是將查到的點合併到連通域中。
並查集有三種常見算法:quick-find、quick-union、加權quick-union,其中檢測速度也是一次遞增。

quick-find算法:
1、 對每一點進行標記
2、 將第一點作爲種子點
3、 依次搜索其他點,如果點滿足與種子點聯通,那麼將該點的標記點值修改爲種子點值(其所屬的點都需要被循環一遍,會限制處理速度),如果不滿足,那麼該點也作爲種子點。
4、 依次循環處理,當所有點都被分類後,即完成。

quick-union算法:
該算法用到樹的處理思想
1、 對每一個點進行標記
2、 將第一點作爲種子點
3、 依次搜索其他點,如果點滿足與種子點聯通,那麼將該點的標記值修改爲種子點的索引值,這樣可以避免對其所屬點進行循環修改。可以提到算法效率。如果不滿足,那麼該點也作爲種子點,即根節點。
4、 依次循環處理,當所有點都被分類後,即完成。

壓縮路徑加權quick-union:
由於quick-union算法在完成標記連通域後,查找某一連通域是,需要不斷查找根節點(即樹高爲2),這裏便會限制處理速度,因此加權辦法就降低數的高度,這樣可以提高搜索速度。
1、 對每一個點進行標記
2、 將第一點作爲種子點
3、 依次搜索其他點,如果點滿足與種子點聯通,那麼將該點的標記值修改爲種子點的根索引值,這樣可以避免對其查找時的效率損失。可以提到算法效率。如果不滿足,那麼該點也作爲種子點,即根節點。
4、 依次循環處理,當所有點都被分類後,即完成。

quick-find算法
quick-find算法示意圖

quick-union算法
quick-union算法
quick-union算法示意圖

加權quick-union
壓縮路徑加權quick-union

複雜度
複雜度表

代碼下載鏈接:https://download.csdn.net/download/OEMT_301/12101456
代碼包含兩種算法:quick-find算法和壓縮路徑quick-union算法,其中處理100的連通域,每個連通域各100個點,quick-find算法處理時間爲6.79924s,壓縮路徑quick-union算法爲1.03054s。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章