[英]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.