並查集 例項一到四 從簡單到理解(一)

2021-09-11 04:17:50 字數 2395 閱讀 5116

網路中節點間的鏈結狀態

網路是個抽象的概念:使用者之間形成的網路

比路徑問題要回答的問題少

和堆作比較

編號分為0和1,只要編號相同就是,同種

/*** 初始化

* @param size

*/public unionfind1(int size)

//檢視元素p和元素q是否所屬乙個集合

@override

public boolean isconnected(int p,int q)

//合併元素p和元素q所屬的集合

@override

public void unionelements(int p,int q)

//檢視元素p和元素q是否所屬乙個集合

@override

public boolean isconnected(int p,int q)

//合併元素p和元素q所屬的集合

@override

public void unionelements(int p,int q)

//查詢元素p和元素q是否所屬乙個集合

@override

public boolean isconnected(int p,int q)

/*** 合併元素p和元素q所屬的集合

* o(h)複雜度,h為樹的高度

*/@override

public void unionelements(int p,int q)

}

package com.binglian.unionfind;

/** * 第三個版本 quick union 基於的size優化

* @author binglian

* */

public class unionfind3 implements uf

return p; }

//查詢元素p和元素q是否所屬乙個集合

@override

public boolean isconnected(int p,int q)

/*** 合併元素p和元素q所屬的集合

* o(h)複雜度,h為樹的高度

*/@override

public void unionelements(int p,int q)else}}

第四版本

package com.binglian.unionfind;

/** * 第四個版本 quick union 基於的size優化

* rank[i]表示根節點為i的樹的高度

* @author binglian

* */

public class unionfind4 implements uf

//查詢元素p和元素q是否所屬乙個集合

@override

public boolean isconnected(int p,int q)

/*** 合併元素p和元素q所屬的集合

* o(h)複雜度,h為樹的高度

*/@override

public void unionelements(int p,int q)

}}

// 我們的第五版union-find

public class unionfind5 implements uf

}@override

public int getsize()

// 查詢過程, 查詢元素p所對應的集合編號

// o(h)複雜度, h為樹的高度

private int find(int p)

return p;

}// 檢視元素p和元素q是否所屬乙個集合

// o(h)複雜度, h為樹的高度

@override

public boolean isconnected( int p , int q )

// 合併元素p和元素q所屬的集合

// o(h)複雜度, h為樹的高度

@override

public void unionelements(int p, int q)}}

並查集的一些理解

從最基本的並查集之後引申到帶權並查集 抽象出種類並查集 實際上都是維護乙個又乙個集合之間的關係 並查集主要寫兩個函式find和merge find函式可以寫成路徑壓縮 或者 按秩合併 或者兩個同時寫 但一般單獨的路徑壓縮就可以了 find函式需要注意的是在find函式內維護陣列 需要等回溯時再維護 ...

種類並查集的一些理解

之前暑假集訓的時候學了一下並查集,但是那個時候完全搞不懂種類並查集 帶權並查集 的路徑壓縮以及兩個節點關係的合併。現在有重新學習了一下,算是對種類並查集有了一些粗淺的理解了吧。關於路徑壓縮 int find int x 其實之前我就不是很懂,為什麼要設乙個temp儲存father x 的值,不應該像...

C primerplus書摘1 第一到第四章

1.getline get 下列程式輸入輸出為 cin不會丟棄換行符,會把換行符留在輸入佇列中,所以getline遇到換行符會把換行符替換成 0 所以s是空串。1 include2 include3 include4 include5 using namespace std 6int main 7 ...