Treap 基礎學習,treap基礎學習

來源:互聯網
上載者:User

Treap 基礎學習,treap基礎學習


現在在公司上班,周末老大讓我們在公司學習,因為最近沒啥項目,所以把之前沒做過的資料結構拿來學習學習,然後今天一下午就看了一個Treap

以前一直以為這玩意是個很神奇的東西,然後看了以後感覺 Treap好像也沒多難的樣子。


        首先要知道二叉排序樹(SBT),SBT很容易理解的,舉例(左小右大),每次插入的操作就是判斷我要插入的數比當前節點小還是大,如果小的話,就遞迴左子樹,不然遞迴右子樹,反正總能找到他所在的位置,然後插進去。在隨機情況下,貌似沒什麼問題,但是會出現特殊情況,導致整個書變成了一條鏈。紅/黑樹狀結構可以解決這個問題,但是因為太麻煩,所以有一種比較簡單的資料結構可以解決這個問題,就是樹堆(Treap)。


        Treap和SBT的區別就在於,多了一個堆性質,這樣做可以保證樹的形狀唯一,避免退化。

        插入節點之後,向上遞迴,調整堆性。。。就是Treap的基本思想,具體的調整方法就是左旋和右旋。

        說白了就如果右子節點的rank值大了,就把他變成根節點,再把當前根節點變成 左子節點,同時,再調整右子節點的左子節點(具體為什麼,畫圖看看就好了)。反之同理。

        通過這樣一個Logn複雜度的操作,就基本保證深度不會退化的很嚴重(當然不能達到絕對的logn)。



著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.