我們想設計一個動態資料結構儲存數字集合S={0, 1, 2, …, n – 1}的倆倆沒有交
集,而且聯集等於S 的子集合。初始時有n 個元素,個數為1 的子集合,分別為
{0}, {1}, …, {n – 1}。我們希望這個資料結構可以支援以下兩個功能:
union(x, y): x, y ∈ S。union(x, y)將包含x 的子集合與包含y 的子集合聯集得到
一個新的子集合,原來的子集合不再存在。
equivalence(x, y): x, y ∈ S。equivalence(x, y)判斷x 與y 是否屬於同一個子集合,
若屬於同一個子集合,則回傳“TRUE”,否則回傳“FALSE”。
上述兩個函式必須能夠依任何順序交替執行。
請描述一個可以達成上述需求而且union(x, y)與equivalence(x, y)的時間複雜度均
為O(log n)的資料結構。(15 分)
請用虛擬碼描述可以在上述資料結構運作的union(x, y)函式。(5 分)
請用虛擬碼描述可以在上述資料結構運作的equivalence(x, y)函式。(5 分)