【python】python 中关于堆的基本结构
未知: heap 到什么用途 ????
原文参考 :https://blog.csdn.net/jamfiy/article/details/88185512
heap
# test in jupyter
from heapq import *
from random import shuffle
data=list(range(10))
shuffle(data)
print(*data)
heap=[]
for n in data:
heappush(heap,n)
heap
# 这里 data 已经是 随机的顺序了, heappush 则是按照 下边说的这套规则放置新的 数字元素, i/2
heap 规则: 元素的排列顺序并不像看起来那么随意。它们虽然不是严格排序的,但必须保证一点:位置i处的元素总是大于位置i // 2处的元素(反过来说就是小于位置2 * i和2 * i + 1处的元素)。这是底层堆算法的基础,称为堆特征(heap property)。
个人做了一些测试。首先 同样是 0--9 ,10个数字,shuffle之后的结果,将会有很多种, 应该是 10*9*8 -----*2*1,种, 但是 , 如果要符合heap特性, 个人设想,因为每次shuffle结果不同,但是 还是可以产生很多种‘heap规则’的排列,我做了两组的情况
Out[29]:
而 data1 和 heap1:
Out[33]:
heappush
heappush(heap,n)
heapify
一个list 必须是不符合 heap原则的,才能使用heapify 处理,处理之后,符合了 heap原则,就无法再对 list 使用这个原则了
heappop
heappop (heap) : 从左到右 依次 弹出数字
heapreplace
heapreplace (heap,n)
用n 来代替原来的最小数字元素
nlargest 和 nsmalllest
需要 import heaq
>>> heapq.nlargest(10,heap)
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>> heapq.nlargest(3,heap)
[9, 8, 7]
可见就是 类似 排序, 取出最大和最小的n个数字

浙公网安备 33010602011771号