什麼是堆
堆是一種特殊的二叉完全樹。堆的乙個主要特點是它以一定的偏序(a partial order)來儲存所有節點[譯者注:此處的偏序是指不完全的排序,堆只需要滿足父節點大於兩個子節點,而子節點之間沒有要求]。作為一顆完全樹,一層中的節點是從左到右填滿的。如果乙個節點沒有左兒子,那麼它一定沒有右兒子。並且在第h層中如果存在節點,那麼第h-1層必須是填滿的。
以下是堆的正式定義(摘自computer algorithms by s. baase and a. van gelder):
乙個二叉樹v是乙個堆,當且僅當它滿足以下條件:
堆有兩種:最大堆和最小堆。最小堆中每個節點的優先順序小於或者等於它的子節點;最大堆則相反,每個節點的優先順序都大於或者等於它的子節點。
圖示最大堆(左)和最小堆(右):
實現細節
cheaptree類通過乙個陣列,從上至下、從左至右地儲存樹中的節點來實現堆。因此,上述圖示中的最大堆就可以表示為10,9,8,6,1,5。在這種表示方式中,第j個節點的子節點和父節點的表達如下(假設起始索引值是0):
如果索引值越界,則該節點不存在。
資料結構 堆
最大堆 最小堆 堆的定義是 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 根結點一定大於 或小於 子結點。因為要求堆必須是完全二叉樹,所以可以用線性的資料結構,比如陣列,來實現堆。利用陣列實現...
資料結構 堆
堆常用來實現優先佇列,在這種佇列中,待刪除的元素為優先順序最高 最低 的那個。在任何時候,任意優先元素都是可以插入到佇列中去的,是電腦科學中一類特殊的資料結構的統稱 最大 最小 堆是一棵每乙個節點的鍵值都不小於 大於 其孩子 如果存在 的鍵值的樹。大頂堆是一棵完全二叉樹,同時也是一棵最大樹。小頂堆是...