python堆的使用,使用堆對類的物件排序

2021-10-09 11:54:01 字數 673 閱讀 6170

今天做實驗寫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。

print

(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 刪除最後乙個資...