簡體   English   中英

路徑壓縮和按秩聯合如何相互補充?

[英]How do path compression and union by rank complement each other?

我一直在閱讀有關聯合查找問題的信息。 兩個主要的改進是路徑壓縮和按等級聯合。 據我了解,按等級聯合用於確定如何組合不相交的樹。 如果我們有兩個不相交的樹 T1 和 T2,那么我們將具有較小秩的樹的根附加到具有較高秩的樹上。 如果我們不使用路徑壓縮,那么等級就是樹的深度。 這是有道理的,因為我們不想增加輸出樹的深度,因為它直接影響發現和聯合。

我的問題是當我們也使用路徑壓縮時。 我一直讀到這兩種優化相互補充,但我沒有看到。 由於路徑壓縮,秩不再是樹的深度(它成為深度的上限)。 假設 T1 有 2 個分支(令 T1 的秩為 3),T2 的深度為 2,秩為 2。現在假設我們對下面標有“*”的 T1 的葉子執行查找操作(帶有路徑壓縮)。 現在,如果我們聯合 T1 的根和 T2 的根,那么 T2 將附加到 T1 的根上(因為 rank 沒有被 find 更新)。 結果樹的深度為 3。但是如果我們將 T1 附加到 T2,我們可以獲得更好的性能。

T1:   o   (Rank = 3)    T2:   o  (Rank = 2)
     / \                      |
    o   o                     o
    |                         |
    o                         o
    |   
    *   

在 T1("*") 的葉子上找到后,然后在 T1 和 T2 的根上並集我們得到

T1:    o       (Rank = 3)      T2: o  (Rank = 2)       
     /| |\                         |
    * o o o                        o
                                   |
                                   o
Result of T1 union T2
       o
   / | | |\
  * o o o  o   Rank = 3 and Max Depth = 3
           |
           o
           |
           o

我在這里錯過了什么嗎? 路徑壓縮和按秩聯合如何相互補充? 我知道等級只是樹深度的上限,但我沒有看到按等級聯合如何提高結構的整體性能。 這比隨機組合根的聯合如何更好?

我在這里先向您的幫助表示感謝。

Union by rank 確保樹的最大深度為 log N,因此它在每個操作上都設置了 O(log N) 的最壞情況上限。

沒有任何特殊聯合的路徑壓縮規定每個操作的攤銷成本的上限為 O(log N),但不限制最壞情況成本 (甚至可能對攤銷成本有更嚴格的限制,但 O(log N) 是我知道如何證明的)

將兩者結合使用,在最壞情況下得到 O(log N) 限制,並且攤銷界限改進為 O(𝛼(N)),這實際上是常數。 通過這種方式,這兩種優化是互補的。

您是對的,有些操作序列按等級聯合並不是絕對最優的,但保證比沒有它時得到的要好,這才是最重要的。 我們通常不會花費精力優化最佳案例性能。 我們優化最壞平均情況。

如果您按等級/權重使用聯合,則問題中的圖 T2 無法首先形成。

只需自己嘗試使用 3 個節點,看看是否可以得出圖 T2。 這是不可能的。 甚至連圖 T1 也不能一開始就形成。

您可以從 N 個節點的示例開始,如果您從一開始就按等級/權重進​​行聯合,您實際上會看到它將提供最佳合並結構(某些操作序列可能不會提供最佳合並,但大多數次它給出了最好的結果)。

換句話說,按等級/權重合並有助於查找方法(反過來使用路徑壓縮進行進一步優化),這使得查找操作幾乎是恆定時間操作。

暫無
暫無

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

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