勵志

勵志人生知識庫

左式堆

左式堆(Leftist Heaps),也被稱為左偏樹或最左堆,是一種特殊的數據結構,結合了堆和二叉樹的特點。它保留了堆的基本屬性,如每個節點的值小於其子節點的值(對於最小堆),以及使用二叉樹結構。但與普通二叉堆不同的是,左式堆並不一定是完全二叉樹,且可能非常不平衡。

左式堆的每個節點都有一個額外的屬性,稱為「NPL」(Null Path Length),表示從該節點到最近的一個沒有兩個孩子的節點的最短路徑長度。葉節點的NPL為0,空節點的NPL為-1。左式堆需要滿足以下性質:

節點的鍵值小於等於其子節點的鍵值(小根性)。

節點的左孩子的NPL不小於其右孩子的NPL(左偏性)。

節點的距離等於其右孩子的NPL加1。

左式堆的主要優點是其在執行合併操作時的效率。合併操作是基於merge操作,時間複雜度可以達到O(log N)。合併過程包括比較兩個堆的根節點、將最小值的堆根節點作為合併後堆的根、遞歸地合併其他節點,以及在必要時調整左右孩子和NPL值。

左式堆在處理集合類問題時非常有用,特別是在需要頻繁合併不同集合的場景中。由於其高效的合併性能,左式堆被廣泛套用於各種算法和數據結構中。