遞歸樹表示遞歸過程中的自我調用。典型的mergsort自己調用兩次,每次調用排序一半的輸入,所以遞歸樹是一個完整的二叉樹。
觀察增加的高度在它們的節點的數字中顯示的圖案的該完整的二叉樹:
height new "layer" total nodes
(h) of nodes (N)
1 1 1
2 2 3
3 4 7
4 8 15
...
在L電平的每個新層具有2 ^大號節點(其中0級是根)。所以很容易地看到,總節的N作爲h的函數是
N = 2^h - 1
現在解決了H:
h = log_2 (N + 1)
如果你有一個5路分割與合併,然後在每個節點樹有5個孩子,而不是兩個。表變爲:
height new "layer" total nodes
(h) of nodes (N)
1 1 1
2 5 6
3 25 31
4 125 156
...
在這裏,我們有N =(5 2 H - 1)/ 4,求解小時,
h = log_5 (4N + 1)
通常,對於一個K-路合併,樹具有N個=(K^h - 1)/(K - 1),所以高度由下式給出:
h = log_K ((K - 1)N + 1) = O(log N) [the log's base doesn't matter to big-O]
但是,要小心。在K-way mergesort中,選擇要合併的每個元素需要Theta(log K)時間。您無論從理論上還是實踐上都不能忽視這一成本!
沒有人有這個用戶名? – 2014-09-02 22:07:17
@RyanHaining用戶名不是唯一的 – 2014-09-02 22:07:39
它是log2(n),不是log2(10),是的,它會是log5(n),但常數會更大,算法更復雜。 – soulcheck 2014-09-02 22:09:04