寒假Day39 Treap平衡樹

2022-10-11 09:00:09 字數 944 閱讀 7241

fhq平衡樹

優點:碼量小、好寫、核心操作的**都是復讀機、支援的操作多

缺點:常數略大

可以解決lct問題

普通treap用來維護樹的平衡的操作:樹旋轉

fhq平衡樹的操作:**split和合併merge 把樹反覆拆開再拼上

結點資訊:左右字數編號、子樹大小(找排名)、值、隨機索引

treap=tree+heap

性質:平衡樹上的每乙個結點存放兩個資訊:乙個是值(滿足二叉樹的性質),乙個是隨機的索引(滿足堆的性質),結合二叉搜尋樹和二叉堆的性質來使樹平衡。

對於隨機資料來說,很多樸素演算法跑的比正解快,但是一些毒瘤資料會卡樸素演算法的最壞時間複雜度,結果會tle

二叉搜尋樹bst的性質:

左結點比當前結點小,右節點比當前結點大

二叉堆(大根堆)的性質:

(想用堆用的都是優先佇列)是乙個完全二叉樹

父節點的優先順序總是大於或等於任何乙個子節點的優先順序

每個節點都有val值,根節點的val值大於左右節點

不用二叉搜尋樹的原因?

因為可能插入的資料是一組有序陣列,那麼就都在根節點的一側,會退化成鏈,不利於搜尋,所以需要進行旋轉

結點儲存的資訊:左右節點、結點值key、val儲存隨機值、cnt這個節點有幾個,size以此為根節點的有多少

插入操作:

正常插入

刪除操作:

如果這個節點的值得個數大於1,就直接減一;否則進行旋轉(需要把該結點旋轉到葉結點再刪除)。

旋**需要判斷多種情況

如果該節點沒有兒子,則直接刪除

右旋的情況:該節點沒有右兒子;該節點的左兒子的值大於右兒子

除此之外:左旋

查詢操作:

根據值查詢排名;

根據排名找值;

尋找前驅;比他小的最大值

尋找後繼。比他大的最小值

treap為什麼會平衡?

平衡樹之Treap

乙個集合支援快速插入 刪除乙個數字。支援快速查詢乙個數字在所有已插入數字中的排名。支援刪除大小在某乙個區間內的數字。動態維護乙個數列。可以在數列的任何位置插入刪除,求區間和,min,max,進行區間翻轉 這就需要用到二叉查詢樹 binary search tree 性質 這是一棵二叉樹。對於任意乙個...

Treap 普通平衡樹

最近學習了treap,找了道題目做做 全抄hz.因為普通的二叉樹,會退化成鏈 所以你把讀入打亂順序再構造二叉樹,就明顯卡不掉 平平均深度logn treap就是這樣的 在插入乙個數時,我們搞乙個rnd,賦值隨機 然後如果當前的這個節點rnd小於其父節點,那麼就把他轉到父節點的位置 這樣好比是給這個節...

平衡樹模板 Treap

演算法標籤 treap 種下第一棵平衡樹 這是一道模板題。如果覺得這個題水的可以做一下4544壓行,是千古神犇花爸爸出的神犇題。您需要寫一種資料結構 可參考題目標題,但是這句話其實並沒有什麼用233 來維護一些數,其中需要提供以下操作 1.插入x數 2.刪除x數 若有多個相同的數,因只刪除乙個 3....