Python 堆

python 堆

堆是一種特殊的樹(shù)結(jié)構(gòu),其中每個(gè)父節(jié)點(diǎn)小于或等于其子節(jié)點(diǎn)。然后它被稱為min heap。如果每個(gè)父節(jié)點(diǎn)大于或等于其子節(jié)點(diǎn),則稱它為最大堆。實(shí)施優(yōu)先級(jí)隊(duì)列是非常有用的,在該隊(duì)列中,具有較高權(quán)重的隊(duì)列項(xiàng)目在處理中具有更高的優(yōu)先級(jí)。有關(guān)堆的詳細(xì)討論,請(qǐng)?jiān)L問(wèn)我們的網(wǎng)站。如果你是頭部數(shù)據(jù)結(jié)構(gòu)的新手,請(qǐng)先研究它。在本章中,我們將看到使用python實(shí)現(xiàn)堆數(shù)據(jù)結(jié)構(gòu)。

 

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

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

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

 

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

通過(guò)簡(jiǎn)單地使用具有heapify函數(shù)的元素列表來(lái)創(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)

當(dāng)上面的代碼被執(zhí)行時(shí),它會(huì)產(chǎn)生以下結(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)

當(dāng)上面的代碼被執(zhí)行時(shí),它會(huì)產(chǎn)生以下結(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)

當(dāng)上面的代碼被執(zhí)行時(shí),它會(huì)產(chǎn)生以下結(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)


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

下一節(jié):python 圖形

python 數(shù)據(jù)結(jié)構(gòu)

相關(guān)文章
亚洲国产精品第一区二区,久久免费视频77,99V久久综合狠狠综合久久,国产免费久久九九免费视频