在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Python/ Python堆
Python樹遍歷算法
Python雙端隊(duì)列
Python隊(duì)列
Python回溯
Python棧
Python數(shù)據(jù)結(jié)構(gòu)開發(fā)環(huán)境
Python數(shù)據(jù)結(jié)構(gòu)簡介
Python算法分析
Python圖遍歷算法
Python搜索算法
Python圖
Python鏈表
Python集合
Python元組
Python字典
Python矩陣
Python高級鏈表(雙向鏈表)
Python搜索樹
Python二維數(shù)組
Python堆
Python節(jié)點(diǎn)
Python排序算法
Python數(shù)據(jù)結(jié)構(gòu)
Python遞歸
Python列表
Python數(shù)組
Python算法設(shè)計(jì)
Python哈希表

Python堆

堆是一種特殊的樹結(jié)構(gòu),其中每個(gè)父節(jié)點(diǎn)小于或等于其子節(jié)點(diǎn)。 然后它被稱為最小堆(Min Heap)。 如果每個(gè)父節(jié)點(diǎn)大于或等于其子節(jié)點(diǎn),則稱它為最大堆(Max Heap)。 實(shí)施優(yōu)先級隊(duì)列是非常有用的,在該隊(duì)列中,具有較高權(quán)重的隊(duì)列項(xiàng)目在處理中具有更高的優(yōu)先級。在本章中,我們將學(xué)習(xí)使用python實(shí)現(xiàn)堆數(shù)據(jù)結(jié)構(gòu)。

創(chuàng)建一個(gè)堆

堆是通過使用python內(nèi)建的名稱為heapq的庫創(chuàng)建的。 該庫具有對堆數(shù)據(jù)結(jié)構(gòu)進(jìn)行各種操作的相關(guān)功能。 以下是這些函數(shù)的列表 -

  • heapify - 此函數(shù)將常規(guī)列表轉(zhuǎn)換為堆。 在結(jié)果堆中,最小的元素被推到索引位置0。但是其余的數(shù)據(jù)元素不一定被排序。
  • heappush - 這個(gè)函數(shù)在堆中添加一個(gè)元素而不改變當(dāng)前堆。
  • heappop - 該函數(shù)返回堆中最小的數(shù)據(jù)元素。
  • heapreplace - 該函數(shù)用函數(shù)中提供的新值替換最小的數(shù)據(jù)元素。

通過簡單地使用具有heapify函數(shù)的元素列表來創(chuàng)建堆。 在下面的例子中,提供了一個(gè)元素列表,heapify函數(shù)重新排列了元素到最初位置的元素。

import heapq

H = [21,1,45,78,3,5]
# Use heapify to rearrange the elements
heapq.heapify(H)
print(H)

執(zhí)行上面示例代碼,得到以下結(jié)果 -

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

插入堆

將數(shù)據(jù)元素插入堆總是在最后一個(gè)索引處添加元素。 但是,只有在值最小的情況下,才可以再次應(yīng)用heapify函數(shù)將新添加的元素添加到第一個(gè)索引。 在下面的例子中,插入數(shù)字 - 8 。

import heapq
H = [21,1,45,78,3,5]
# Covert to a heap
heapq.heapify(H)
print(H)
# Add element
heapq.heappush(H,8)
print(H)

執(zhí)行上面示例代碼,得到以下結(jié)果 -

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

從堆中移除

可以使用此功能在第一個(gè)索引處移除元素。 在下面的例子中,函數(shù)將始終刪除索引位置1處的元素。

import heapq

H = [21,1,45,78,3,5]
# Create the heap

heapq.heapify(H)
print(H)

# Remove element from the heap
heapq.heappop(H)

print(H)

執(zhí)行上面示例代碼,得到以下結(jié)果 -

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

替換堆

heapreplace函數(shù)總是刪除堆中最小的元素,并在未被任何順序修復(fù)的地方插入新的傳入元素。參考以下示例 -

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)

執(zhí)行上面示例代碼,得到以下結(jié)果 -

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

上一篇:Python列表下一篇:Python排序算法