Treap樹堆非旋轉演算法

2022-10-09 05:21:08 字數 422 閱讀 2700

核心操作:**與合併

**(split)有兩種:按權值**與按位置(排名)**

如果按權值**(split):那麼分出來兩棵樹的第一棵樹上的每個數的大小都小於(或者小於等於,視具體情況)x。

如果按位置**(split):那麼分出來兩棵樹的第一棵樹上恰好有x個結點。

//按權值**

inline void split(int k,int &l,int &r,int x)

if(tree[k].val}

push_up(k);

}//同理可得近位置**

inline void split(int k,int &l,int *r,int x)

if(tree[tree[k].l].size+1<=x)else

push_up(k);

}

可旋轉Treap 樹堆 總結

樹堆,在資料結構中也稱treap,是指有乙個隨機附加域滿足堆的性質的二叉搜尋樹,其結構相當於以隨機資料插入的二叉搜尋樹。其基本操作的期望時間複雜度為o logn 相對於其他的平衡二叉搜尋樹,treap的特點是實現簡單,且能基本實現隨機平衡的結構。在深入了解treap之前,我們先來了解一下bst。bs...

Treap(樹堆)詳解

本篇隨筆詳細講解一下一種隨機化資料結構 樹堆 treap 首先給乙個字串等式 treap tree heap 所以 treap 樹堆其實就是樹 堆。樹是二叉查詢樹 bst 堆是二叉堆,大根堆小根堆都可以。關於 bst 的相關知識,請看官走這邊 bst詳解 樹堆既是一棵二叉查詢樹,也是乙個二叉堆。但是...

關於非旋轉treap的學習

非旋轉treap的操作基於split和merge操作,其餘操作和普通平衡樹一樣,複雜度保證方式與旋轉treap差不多,都是基於乙個隨機的引數,這樣構出的樹樹高為 logn 作用 將原平衡樹分為排名為 1,k k 1,n 的兩棵平衡樹 實現 1.如果 x 左兒子的子樹大小 size l k 那麼 x ...