python用heapq模組構建大根堆

2021-10-24 02:20:28 字數 626 閱讀 6301

python的heapq模組可以快速構建堆。只是heapq只能構建小根堆,不能構建大根堆。

import heapq

data2 = [1,5,3,2,9,5]

heapq.heapify(data2)

print(data2)

#輸出:[1, 2, 3, 5, 9, 5]

大根堆的做法:

import heapq

ll=[1,4,2,3,5]

print(ll,'原始陣列')

heapq.heapify(ll)

print(ll,'小根堆')

# 此時若想得到大頂堆

newl = [(-i, ll[i]) for i in range(len(ll))]

print(newl,'插入負數後的小根堆')

heapq.heapify(newl) #以插入的負數做小根堆,越大的數字插入的負數就越小,所以這樣就相當於做了大根堆

# 此時已經按照第乙個值變成了小頂堆,即變成了逆序

max_heap = list()

while newl:

print(max_heap,'輸出的大根堆')

Python中的heapq模組

heapq模組提供基於堆的優先排序演算法,內建模組位於.anaconda3 lib heapq.py。堆的邏輯結構就是完全二叉樹,並且二叉樹中父節點的值小於等於該節點的所有子節點的值。這種實現可以使用 heap k heap 2k 1 並且 heap k heap 2k 2 其中 k 為索引,從 0...

Python中堆模組heapq

對於排序演算法有很多種,其中包括常見的 氣泡排序,選擇排序,插入排序,希爾排序,快速排序,歸併排序,堆排序 這裡主要講一下堆排序,可以採用自己的方式實現,也可以採用python內建模組heapq實現,現在分別從這兩種方法實現一下.1 自己實現 import math from collections...

Python堆排序內建模組heapq

挨個出數 合併獲取前n最大或最小的元素 實現優先佇列 其他方法 該模組提供了堆排序演算法的實現。堆是一顆特殊的完全二叉樹。小根堆 滿足任一節點都比其孩子節點小 大根堆 滿足任一節點都比其孩子節點大使用heap.heapify list 轉換列表成為堆結構 import heapq import ra...