簡體   English   中英

將一棵二叉搜索樹右轉換為另一棵的時間復雜度

[英]Time complexity of right-converting one binary search tree into another

如果可以通過僅對 T1 執行右旋轉從 T1 獲得 T2,則 BST T1 可以右轉換為另一個 BST T2。 我需要證明這個操作可以在 $O(n^2)$ 右旋中完成。

假設給定 T1 可以右轉換為 T2。 我理解算法的遞歸性質,因為我們首先將 T2 的根(它必須在 T1 的最左側路徑中才能右轉換)帶到 T1 的根,然后重復此過程T1 的 2 個子樹。

但是,我無法提出一個演示最壞情況行為的示例。 盡管我不確定如何證明這是否是最壞的情況,但我能夠想到這兩棵樹。

 Tree 1                Tree 2 

          6                  1                   
         /                    \                 
        5                      2              
       /                        \               
      4                          3               
     /                            \                  
    3                              4                
   /                                \
  2                                  6
 /                                  /
1                                  5

通過從節點 2 開始向右旋轉 5+4+3+2 次,可以將樹 1 右轉換為 T2。

一般來說,我如何找到需要 $O(n^2)$ 右轉才能將一個 BST 轉換為另一個的情況?

證明草圖:

T1=(V,E) , n=#V 考慮在從T1開始的重復(右)旋轉過程中發生的樹序列<T1 = X_0, X_1, ..., X_(t-1), X_t = T2> 對於任何給定的旋轉,讓“旋轉錨”表示旋轉子樹的根節點。

觀察#1:
旋轉任何給定的子樹不會改變它的頂點集。

觀察#2:
在給定子樹的任何右旋轉序列s中,每個頂點最多是一次旋轉錨點。 (在每次右旋轉中,錨點遷移到右子樹中。右旋轉后的新根起源於左子樹;或者請注意,每次旋轉時,右子樹都會增長 1 個頂點;因此對於子樹S ,最多有#V(S)-1個旋轉)。

觀察#3:
右旋轉不會改變子樹的數量。

任何樹中子樹的數量都等於可用根的數量#V-1 因此,最大長度的右旋轉序列涉及O(n)個子樹,每個子樹最多有#V(S)-1 (= O(n) ) 個旋轉,總共O(n^2)

暫無
暫無

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

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