簡體   English   中英

不相交的集合和聯合數據結構

[英]Disjoint Set and Union Data Structure

聯合查找結構是一種支持以下操作的數據結構:

● find(x),返回節點x的代表,以及
● union(x, y),將包含x 和y 的集合合並為一個集合。

Find(x) 的時間復雜度為O(n) ,因此為了改進這一點,我們建議使用Ranks 的概念

較大的連接組件吃掉較小的組件

這將時間復雜度提高到O(logn)

我無法理解我們如何通過合並樹的 Rank(Depth) 基礎來提高時間復雜度,以及如何實現 O(logn) 時間復雜度。

請幫助我理解我根據等級合並樹的概念。

關鍵是要理解表示集合的樹的最大高度是log(n) + 1的大小,因此,從任何給定節點到其根節點的后續節點是通過O(log(n))步驟完成的。

我們現在必須證明不相交集森林中每棵樹的高度最多為log(n) + 1 - 其中n是這棵樹中的節點數。 我們將通過歸納證明它並表明在每個union(x,y) - 這個屬性保持不變。

基數:當我們開始時,我們有n不同的樹,所有的大小都是 1。 log(1) + 1 = 1 - 所以每棵樹確實是最大高度log(n) + 1

Union(x,y) :我們合並兩個集合,大小為n1 x和大小為n2 y。 不失一般性,令n1<=n2
根據歸納假設,表示x的樹的高度 h1 至多為log(n2)+1因此,聯合運算是通過將x的根更改為指向y的根來完成的。 這意味着x中任何節點的最大高度現在最多為

h1+1 = log(n1)+1 + 1 = log(n1) + log(2) + 1 = log(2*n1) + 1 = log(n1 + n1) + 1 <= log(n1 + n2) + 1

所以,我們剛剛發現,對於正式在x每個節點,到根的最大距離是log(n1+n2) + 1 ,並且新樹的大小( xy合並)現在是n1+n2 ,所以我們證明了對於任何形式上在x節點,所需的屬性仍然存在。
對於y - 到根的距離保持不變,而樹的大小不會縮小 - 因此該屬性在那里也有效。
總之 - 對於所有在xy節點,根據需要,新根的最大深度現在是log(n1+n2)+1
QED


備注 - 此答案中的所有log均以 2 為基數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM