python最小堆 Python堆

2021-10-19 21:37:33 字數 1689 閱讀 1852

本篇文章幫大家學習python堆,包含了python堆使用方法、操作技巧、例項演示和注意事項,有一定的學習價值,大家可以用來參考。

堆是一種特殊的樹結構,其中每個父節點小於或等於其子節點。 然後它被稱為最小堆(min heap)。 如果每個父節點大於或等於其子節點,則稱它為最大堆(max heap)。 實施優先順序佇列是非常有用的,在該佇列中,具有較高權重的佇列專案在處理中具有更高的優先順序。在本章中,我們將學習使用python實現堆資料結構。

建立乙個堆

堆是通過使用python內建的名稱為heapq的庫建立的。 該庫具有對堆資料結構進行各種操作的相關功能。 以下是這些函式的列表 -

heapify - 此函式將常規列表轉換為堆。 在結果堆中,最小的元素被推到索引位置0。但是其餘的資料元素不一定被排序。

heapreplace - 該函式用函式中提供的新值替換最小的資料元素。

通過簡單地使用具有heapify函式的元素列表來建立堆。 在下面的例子中,提供了乙個元素列表,heapify函式重新排列了元素到最初位置的元素。

import heapq

h = [21,1,45,78,3,5]

# use heapify to rearrange the elements

heapq.heapify(h)

print(h)

執行上面示例**,得到以下結果 -

[1, 3, 5, 78, 21, 45]

插入堆將資料元素插入堆總是在最後乙個索引處新增元素。 但是,只有在值最小的情況下,才可以再次應用heapify函式將新新增的元素新增到第乙個索引。 在下面的例子中,插入數字 - 8 。

import heapq

h = [21,1,45,78,3,5]

# covert to a heap

heapq.heapify(h)

print(h)

# add element

print(h)

執行上面示例**,得到以下結果 -

[1, 3, 5, 78, 21, 45]

[1, 3, 5, 78, 21, 45, 8]

從堆中移除

可以使用此功能在第乙個索引處移除元素。 在下面的例子中,函式將始終刪除索引位置1處的元素。

import heapq

h = [21,1,45,78,3,5]

# create the heap

heapq.heapify(h)

print(h)

# remove element from the heap

print(h)

執行上面示例**,得到以下結果 -

[1, 3, 5, 78, 21, 45]

[3, 21, 5, 78, 45]

替換堆heapreplace函式總是刪除堆中最小的元素,並在未被任何順序修復的地方插入新的傳入元素。參考以下示例 -

import heapq

h = [21,1,45,78,3,5]

# create the heap

heapq.heapify(h)

print(h)

# replace an element

heapq.heapreplace(h,6)

print(h)

執行上面示例**,得到以下結果 -

[1, 3, 5, 78, 21, 45]

[3, 6, 5, 78, 21, 45]

最小堆及基於最小堆的最小優先佇列

最小堆具有的性質 最小堆的父親節點比子節點的值小 在最小堆的類中我們定義的函式主要有 維護最小堆 建立最小堆和利用最小堆進行排序 以下是最小堆的定義 ifndef my min heap h define my min heap h include includeusing namespace st...

最小堆建立

題目 實現最小堆兩個功能 1 增加乙個元素 2 輸出並刪除最小堆中的最小的數 輸入 第一行輸入乙個整數t,代表測試資料的組數。對於每組測試資料,第一行輸入乙個整數n,代表操作的次數。每次操作首先輸入乙個整數type。當type 1,增添操作,接著輸入乙個整數u,代表要插入的元素。當type 2,輸出...

用python的list物件實現最小堆的優先佇列

class prio queue object docstring for prio queue,最小堆優先佇列 def init self,elems self.elems list elems self.build queue def clear queue self 清除整個佇列 self.e...