當前位置:
首頁 >
数据结构---并查集
發(fā)布時間:2024/9/5
50
豆豆
生活随笔
收集整理的這篇文章主要介紹了
数据结构---并查集
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
并查集,顧名思義,合并 查找 集合;
并查集是一種樹型的數(shù)據(jù)結構,用于處理一些不相交集合(Disjoint Sets)的合并及查詢問題。常常在使用中以森林來表示。
對于概念等等的這里不再贅述,直接講解應用。
應用1:判斷圖中有多少聯(lián)通分量 , 或者圖是否聯(lián)通(聯(lián)通分量 == 1) HDU 1213
應用2:判斷圖是否成環(huán)? 給個例題 HDU2120
【初始化】 MakeSet,將每一個節(jié)點的父節(jié)點置為本身;rank(秩),是節(jié)點構成樹的深度
void MakeSet(){for(int i=1;i<=maxn;i++){parent[i].value = i;parent[i].rank=0;} }【查找】 一直向上查找,直到找到當前節(jié)點的代表,或者說當前節(jié)點所在樹的根
ps:路徑壓縮,由于查找耗時與樹的深度有關,, 所以我們經(jīng)過一次查找,都把節(jié)點所在樹 壓縮,使之扁平化,這樣樹的深度就大大減小了。
【合并】
因為從上面的查找可以看出,查找的效率主要影響因素是樹的深度,也就是秩,所以我們在合并兩顆樹的時候,把秩較小的接在 秩較大的樹的根節(jié)點上
這樣,樹的秩就不會加深,如果 兩棵樹的秩相等,那么深度也只會加1;
轉載于:https://www.cnblogs.com/chaiwenjun000/p/5320985.html
總結
以上是生活随笔為你收集整理的数据结构---并查集的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python -- 使用模块中的函数
- 下一篇: Verilog inout 双向口使用和