樹堆

欢乐豆123發表於2024-04-21

樹堆

在某些極端情況下,二叉查詢樹有可能退化為連結串列,所以前輩們想盡了各種最佳化策略,包括AVL,紅黑,以及今天要講的Treap樹

Treap樹是一種簡單的最佳化策略,從名字也可以猜到(Treap=Tree+Heap)


它是樹和堆的合體。實原理很簡單,在樹中維護一個”優先順序“,”優先順序“採用隨機數的方法生成,但是”優先順序“必須滿足根堆的性質,當然是“最大堆”或者“最小堆”都無所謂

是一種隨機化平衡二叉搜尋樹,結合了二叉堆和二叉查詢樹的特性。

樹堆的每個節點包含一個鍵值和一個隨機優先順序值。

樹堆的特點是透過維護鍵值的二叉查詢樹性質和優先順序的堆性質來保持平衡。透過保持這兩個性質,樹堆可以在插入和刪除節點時自動進行平衡操作。樹堆的優勢在於它相對簡單的實現和高效的查詢操作。


鍵值特性:樹堆的每個節點包含一個鍵值和一個隨機的優先順序值。鍵值用於節點的比較和排序,優先順序值用於平衡樹的結構。


從上圖可以看出:

1)節點中的值滿足二叉查詢樹特性;
2)節點中的優先順序滿足最大堆特性;


二叉搜尋樹性質:樹堆維護了二叉搜尋樹的性質,即對於任意節點,它的左子樹中的所有節點的鍵值小於該節點的鍵值,右子樹中的所有節點的鍵值大於該節點的鍵值。
堆性質:樹堆也維護了堆的性質,即對於任意節點,它的優先順序值大於其子節點的優先順序值。
隨機化平衡:樹堆透過隨機生成節點的優先順序值來實現平衡。節點的優先順序值和鍵值無關,它的隨機性保證了樹的平衡性質。


插入操作:當插入一個新節點時,樹堆首先按照二叉搜尋樹性質找到插入的位置,然後根據節點的優先順序值,透過旋轉操作保持堆性質和搜尋樹性質。


刪除操作:刪除一個節點時,樹堆首先根據二叉搜尋樹性質找到要刪除的節點,然後透過旋轉操作將其刪除,並保持堆性質和搜尋樹性質。

相關文章