《讀資料結構與演算法分析》
等價關係
滿足三個性質
基本資料結構
基本思路
使用乙個陣列,下標表示該集合,內容表示指向的父親實現
型別宣告
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...