今天做實驗寫python,需要建立乙個堆(優先佇列),對node類的物件進行排序,堆中會加入node、每次彈出f值最小的node。
需要在node類中定義小於函式,即__lt__,在這裡,f值越小,優先順序越大。
# 小於比較
def__lt__
(self, other)
:return self.get_f(
)< other.get_f(
)
首先是引入heapq。
from heapq import
*
堆是乙個list,用heap表示,每次可以向heap中插入乙個node。
a = node(
) a.h =
5 b = node(
) b.h =
7 c = node(
) c.h =
23 heap =
也可以heap初始化將一開始的node全部寫入,然後建立堆。
heap =
[b, a, c]
heapify(heap)
每次彈出優先順序最高的node。
(q.get_f())
堆 初步學習堆的簡單使用
堆的使用 今天學習了乙個演算法,堆 用法之一 堆一般用陣列的形式儲存數字,通過維護乙個完全二叉樹的結構來儲存前幾大的數字 先確定乙個需要維護的數字的多少,然後建立乙個陣列,陣列的第一樹根是arr 然後每個arr i 樹根的左兒子是arr 2i 右兒子 是arr 2i 1 十分具有規律,所以一般就用陣...
堆區的使用
define crt secure no warnings include include includeint getspace for int i 0 i 5 i return p void test01 手動在堆區建立的資料,要手動釋放 free p p null 注意 如果主調函式中沒有給指...
C STL中堆的使用
include include using namespace std vectora 建堆,建好後第乙個元素最大 小 make heap a.begin a.end less 取最大值 x a.front pop heap a.begin a.end less a.pop back 刪除最後乙個資...