不相交集合ADT 資料結構(C語言實現)

2021-10-02 10:10:40 字數 1299 閱讀 8612

《讀資料結構與演算法分析》

等價關係

滿足三個性質

基本資料結構

基本思路

使用乙個陣列,下標表示該集合,內容表示指向的父親實現

型別宣告

typedef

int disjset[numsets +1]

;typedef

int settype ;

typedef

int elementstype ;

void

intialize

(disjset s)

;void

setunion

(disjset s,settype root1,settype root2)

;settype find

(elementtype x,disjset s)

;

初始化

void

intialize

(disjset s)

union操作

不是最好的方法

void

union

(disjset s,settype root1,settype root2)

find操作

settype find

(elementtype x, disjset s)

更好的find操作

讓根節點的陣列內容為高度的相反數,也就是用負數表示

void

setunion

(disjset s,settype root1,settype root2)

}

路徑壓縮

執行union操作最終都會形成最壞情形的樹

改進find方法

改進的find函式

settype find

(elementtype x,disjset s)

出處:

資料結構 不相交集ADT

若對於每一對元素 a,b a b屬於s,arb或者為true或者為false,則稱在集合s上定義關係r。如果arb是true,那麼我們說a與b有關係。等價關係是滿足下列三個性質的關係r 自反性 對於所有的a屬於s,ara 對稱性 arb當且僅當bra 傳遞性 若arb且brc,則arc 乙個元素a屬...

用於不相交集合的資料結構

make set x 建立乙個集合,它的唯一成員 因而為代表 是x。因為各個集合是不相交的,所以x不會出現在別的某個集合中 union x,y 將包含x和y的兩個集合合併。假定操作之前著兩個集合是不相交的。find set x 返回乙個指標,這個指標指向包含x的 唯一 集合的代表。按秩合併 秩表示該...

不相交集資料結構

用乙個1x3的陣列來儲存每個數的數 其父親 秩。首先尋找合併的兩個樹的根的根,然後按照秩的大小將兩個樹進行合併。尋找兩個數的根時,順便壓縮其與根的距離 include define max 100 int find int a 3 int n void rootunion int a 3 int m...