不相交集合的學習筆記

2021-07-24 14:09:40 字數 1034 閱讀 1076

1、乙個元素a屬於s的等價類是s的乙個子集,它包含所有與a有(等價)關係的元素。

2、不相交集:n個集合的類,每個集合含有乙個元素,所有集合間的關係均為false(除自反關係外),每個集合都有乙個不同的元素,從而得到si∩sj=φ,為不相交集。

3、不相交集的兩種操作:

1)find(),返回包含給定元素的集合的名字。

2)新增關係:新增關係a˜b

首先判斷a和b是否在同乙個等價類中,用find來實現,若是(在同乙個等價類中),不用操作。否則,操作union,將a和b的兩個等價類合併成乙個新的等價類。利用的是不相交集合的union/find演算法。

4、不相交集合的union/find演算法

1)屬於動態演算法;

3)另一種可能是離線(off-line)演算法:該演算法需要觀察全部的union和find序列。它對每乙個find給出的答案必須和所有被執行到該find的union一致,但是該演算法在看到這些問題以後才能夠給出它的所有答案。

另外,find(a) == find(b)若為true當且僅當a和b在同乙個集合中。

5、不相交集合類的基本資料結構的實現:

package 不相交集;

public class disjointsets }

//不相交集合的union()方法一,該方法存在缺陷,只能將乙個集合固定的接到另乙個集合中,形成新的集合

public void union(int root1, int root2)

//不相交集合的union()方法二,按照高度來合併兩個集合

public void union2(int root1, int root2)else

s[root2] = root1;//s[roo1] < s[root2],root1更深一些

} }//不相交集合的find()方法一

public int find(int x)else }

//用路徑壓縮對不相交集合進行find()的方法二

public int find1(int x)else

}}

演算法之不相交集合森林

package com.eshore.sweetop.exdataframe public class disjointsetforest public void link disjointsetnode nodex,disjointsetnode nodey else public void un...

並查集(不相交集合)

早上早早起來看kruscal的mst演算法,原來要用到不相交集合來實現。拿起 演算法導論 看完不相交集合這章,頓然茅塞頓開,終於完成並查集的基礎知識的學習。演算法導論 真是牛 不相交集合有兩種不同的實現,鍊錶表示和帶路徑壓縮的按秩合併策略。看到大家都比較喜歡用帶路徑壓縮的按秩合併策略,那麼我只認真研...

不相交集ADT

1.不相交集是解決等價關係的一種資料結構,執行合併和查詢的速度都非常快,m次執行合併和查詢的執行時間為 m logn 在乙個集合中,對於每一對元素 a,b a,b s,對於關係r如果滿足下面三個條件,則成關係r為等價關係 1 自反性 對於所有a s,ara 2 對稱性 arb當且僅當bra 3 傳遞...