d-堆
二叉堆因為實現簡單,因此在需要優先佇列的時候幾乎總是使用二叉堆。d-堆是二叉堆的簡單推廣,它恰像乙個二叉堆,只是所有的節點都有d個兒子(因此,二叉堆又叫2-堆)。下圖表示的是乙個3-堆。注意,d-堆要比二叉堆淺得多,它將insert操作的執行時間改進為
。然而,對於大的d,deletemin操作費時得多,因為雖然樹淺了,但是d個兒子中的最小者是必須找到的,如果使用標準演算法,將使用d-1次比較,於是將此操作的時間提高到
。如果d是常數,那麼當然兩種操作的執行時間都為 o(logn)。雖然仍可以使用乙個陣列,但是,現在找出兒子和父親的乘法和除法都有個因子d,除非d是2的冪,否則會大大增加執行時間,因為我們不能再通過二進位制移位來實現除法和乘法了。d-堆在理論上很有趣,因為存在許多演算法,其插入次數比刪除次數多得多,而且,當優先佇列太大不能完全裝入記憶體的時候,d-堆也是很有用的,在這種情況下,d-堆能夠以與b-樹大致相同的方式發揮作用。
除了不能執行find操作外(指以對數執行),堆的實現最明顯的兩個缺點是:將兩個堆合併成乙個堆是很困難的。這種附加的操作叫做merge。存在許多實現堆的方法使得merge操作的執行時間為o(logn),如下篇介紹的左式堆。
二叉堆
資料結構 堆
最大堆 最小堆 堆的定義是 n個元素的序列,當且僅當滿足如下關係時被成為堆 1 ki k2i 且 ki k2i 1 或 2 ki k2i 且 ki k2i 1 i 1,2,n 2 當滿足 1 時,為最小堆,當滿足 2 時,為最大堆。若將此序列對應的一維陣列堪稱是乙個完全二叉樹,則2i和2i 1個節點...
資料結構 堆
資料結構 堆的操作和實現 當應用優先順序佇列或者進行堆排序時,一般利用堆來實現。堆是乙個完全 除最底層 外都是滿的 二叉樹,並滿足如下條件 1 根結點若有子樹,則子樹一定也是堆。2 根結點一定大於 或小於 子結點。因為要求堆必須是完全二叉樹,所以可以用線性的資料結構,比如陣列,來實現堆。利用陣列實現...
資料結構 堆
堆常用來實現優先佇列,在這種佇列中,待刪除的元素為優先順序最高 最低 的那個。在任何時候,任意優先元素都是可以插入到佇列中去的,是電腦科學中一類特殊的資料結構的統稱 最大 最小 堆是一棵每乙個節點的鍵值都不小於 大於 其孩子 如果存在 的鍵值的樹。大頂堆是一棵完全二叉樹,同時也是一棵最大樹。小頂堆是...