左偏樹的簡單實現

2021-08-20 10:17:25 字數 554 閱讀 2193

左偏樹,顧名思義,就是向左傾斜的樹

這棵破樹就是用來實現可並堆的,也就是說,是比堆多出了乙個合併的操作

左偏樹的定義是:左邊的節點個數大於右邊的節點個數

這就使其可以資瓷合併的操作

比二叉堆的o(size1 + size2)快多了 這是o(logsize1 + size2)

三個性質(**中要維護的三個性質)【還是從1開始吧】

當前節點的鍵值小於等於或大於等於它的左右兒子的鍵值(堆性質)

當前節點的左兒子的深度不小於右兒子的深度

當前節點的深度等於右兒子的深度+1

這篇由非常菜的選手寫的部落格只介紹merge和pop操作

struct hazaking

tr[500005];

//以下為合併操作

//getfather懶得放

int merge(int x, int y)(這裡的x y是兩棵左偏樹的根節點)

//以下為刪除操作

void del(int x)

我覺得插入和任意刪除這種自己想也能想出來

可並堆 左偏樹實現

堆是優先佇列的一種實現方式,堆中父節點大於等於 或小於等於 兩子節點,每次的刪除,查詢,插入都是 o l og2n o log 2n o log2 n 的複雜度 左兒子的dis值大於等於右兒子的dis值 定義結束,我們可能要問如何建一棵左偏樹?這裡我要說,左偏樹和傳統的堆不同,沒有pushup操作,...

左偏樹總結

既然新學了左偏樹,那我就來寫一些學了左偏樹之後的總結吧 首先,它支援的是兩個堆的合併過程。那麼最容易想到的是把乙個堆的元素全部彈出,乙個乙個加入另乙個堆中,就合併了。顯然這樣合併的複雜度是o n 的,再加上程式的其他部分,很慢。我們就考慮讓複雜度減小到o logn 很恐怖,沒錯,這就是左偏樹存在的意...

左偏樹 模板

神經病也可以寫成右偏樹 具體左偏指左節點的距離 geq 右節點的距離 距離指離最近擁有空節點的節點的距離 乙個節點的值一定 或 leq 或 geq 或 其子節點的值 由於左偏性質,每次可以合併至右邊,維護左偏性質後就可以保證複雜度 被踩爆的板子 或者是我?include define ls lson...