【数据结构与算法】左式堆的Java实现
生活随笔
收集整理的這篇文章主要介紹了
【数据结构与算法】左式堆的Java实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
引言
二叉堆是對優先隊列的一種高效實現,左式堆是針對二叉堆合并操作困難的缺點,而提出的另外一種優先隊列實現方式。
線性結構合并困難是顯而易見的,而二叉堆那樣高效的支持合并操作而且只使用一個數組更是難得。
這是因為,合并似乎需要把一個數組拷貝到另一個數組中去,對于相同大小的堆,這將花費O(N)。
但這區區O(N)還不夠,所以就不能使用順序存儲結構,應該使用鏈式指針。有一句話說的特別好:所有支持高效合并的高級數據結構都需要使用指針。
能更高效完成合并的左式堆和二項隊列顯然都是使用了指針,是鏈接存儲的。
左式堆詳解
這里有一篇比較詳細的講解,可看
從npl屬性看左式堆
注意理解 npl 這個屬性,npl 是 null path length 的縮寫,意為從該結點到達一個沒有兩個孩子的結點的最短距離(一個孩子的結點或者葉子結點)。
一般定義 null 的 npl 為 -1 以使計算簡便。
容易得到,任意結點的 npl 是它的子結點的 npl 中較小的那個結點的 npl+1 。
即
總結
以上是生活随笔為你收集整理的【数据结构与算法】左式堆的Java实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 贪心 or 动态规划 求解“最大字段和”
- 下一篇: 【Java】剖析@Deprecated注