1. 程式人生 > >隨機化的二叉搜尋樹總結(treap,隨機輸入)

隨機化的二叉搜尋樹總結(treap,隨機輸入)

看資料結構的時候,書裡面說對於隨機輸入的序列,BST的期望深度是log(n),當時沒當一回事(其實是證明看不懂),這兩天覆習二叉搜尋樹遇到樹堆(treap)又回去翻了一下證明過程,其實還蠻簡單的。

   總結起來也就一句話:

   只要保證BST的任意子樹的根節點選取是隨機的,那麼這顆樹的期望深度就必然是log(n).

證明如下:

 1.首先要定義一個概念——內部路徑長(D(N)),也就是一個樹內每個節點的深度和,平均一下也就得到了一棵樹的期望深度。

  D(N) = D(M) - D(N-M-1) + N-1 一顆樹的路徑長 = 左子樹的路徑長 + 右子樹的路徑長 + N-1 (子樹的節點個數)

 假如 M 取任意值的概率一樣(1/N),那麼有:


這個通項公式最終規模是D(N) = O(NlogN)的。

2.對於隨機輸入的資料,任意值為根的概率是一樣的。

(1)排在第一位的值必然為根,由於輸入資料隨機,那麼為排在第一的數自然是隨機的。

3.treap樹

我們知道優先順序最小的資料必然是根(堆序性),並且treap的優先順序是隨機給予的,那麼一個數有最小優先順序的概率自然是相等的,那麼自然的,任一值被選取為根的概率是相同的,自然treap樹的平均深度為logN。