Python中的堆数据结构——heap模块
来源:互联网 发布:linux下android studio 编辑:程序博客网 时间:2024/06/06 04:44
>>> import heapq>>> help(heapq)Help on module heapq:NAME heapq - Heap queue algorithm (a.k.a. priority queue).FILE c:\python27\lib\heapq.pyDESCRIPTION Heaps are arrays for which a[k] <= a[2*k+1] and a[k] <= a[2*k+2] for all k, counting elements from 0. For the sake of comparison, non-existing elements are considered to be infinite. The interesting property of a heap is that a[0] is always its smallest element. Usage: heap = [] # creates an empty heap heappush(heap, item) # pushes a new item on the heap item = heappop(heap) # pops the smallest item from the heap item = heap[0] # smallest item on the heap without popping it heapify(x) # transforms list into a heap, in-place, in linear time item = heapreplace(heap, item) # pops and returns smallest item, and adds # new item; the heap size is unchanged Our API differs from textbook heap algorithms as follows: - We use 0-based indexing. This makes the relationship between the index for a node and the indexes for its children slightly less obvious, but is more suitable since Python uses 0-based indexing. - Our heappop() method returns the smallest item, not the largest. These two make it possible to view the heap as a regular Python list without surprises: heap[0] is the smallest item, and heap.sort() maintains the heap invariant!FUNCTIONS heapify(...) Transform list into a heap, in-place, in O(len(heap)) time. heappop(...) Pop the smallest item off the heap, maintaining the heap invariant. heappush(...) heappush(heap, item) -> None. Push item onto heap, maintaining the heap invariant. heappushpop(...) heappushpop(heap, item) -> value. Push item on the heap, then pop and return the smallest item from the heap. The combined action runs more efficiently than heappush() followed by a separate call to heappop(). heapreplace(...) heapreplace(heap, item) -> value. Pop and return the current smallest value, and add the new item. This is more efficient than heappop() followed by heappush(), and can be more appropriate when using a fixed-size heap. Note that the value returned may be larger than item! That constrains reasonable uses of this routine unless written as part of a conditional replacement: if item > heap[0]: item = heapreplace(heap, item) merge(*iterables) Merge multiple sorted inputs into a single sorted output. Similar to sorted(itertools.chain(*iterables)) but returns a generator, does not pull the data into memory all at once, and assumes that each of the input streams is already sorted (smallest to largest). >>> list(merge([1,3,5,7], [0,2,4,8], [5,10,15,20], [], [25])) [0, 1, 2, 3, 4, 5, 5, 7, 8, 10, 15, 20, 25] nlargest(n, iterable, key=None) Find the n largest elements in a dataset. Equivalent to: sorted(iterable, key=key, reverse=True)[:n] nsmallest(n, iterable, key=None) Find the n smallest elements in a dataset. Equivalent to: sorted(iterable, key=key)[:n]DATA __about__ = 'Heap queues\n\n[explanation by Fran\xe7ois Pinard]\n\nH..... __all__ = ['heappush', 'heappop', 'heapify', 'heapreplace', 'merge', '...
demo:
>>> a_list = [1,4,5,2,6,9,0,3]#把list转化成heap>>> heapq.heapify(a_list) >>> a_list[0, 2, 1, 3, 6, 9, 5, 4]#选出n个最大和最小值。 O(n)时间复杂度>>> heapq.nlargest(3,a_list)[9, 6, 5]>>> heapq.nsmallest(3,a_list)[0, 1, 2]
>>> heapq.heappushpop(a_list,7)0#返回当前最小值,再添加新元素>>> heapq.heapreplace(a_list,-1)1>>> a_list[-1, 2, 5, 3, 6, 9, 7, 4]#添加新元素并返回最小值>>> heapq.heappushpop(a_list,-2)-2>>> a_list[-1, 2, 5, 3, 6, 9, 7, 4]
阅读全文
0 0
- Python中的堆数据结构——heap模块
- 浅谈数据结构—堆(heap)
- Heap——数据结构之堆
- 堆——heap
- 【数据结构】堆 Heap
- 【数据结构】堆(heap)
- 数据结构 《6》----堆 ( Heap )
- 数据结构-树-堆(heap)
- 数据结构之堆Heap
- 数据结构-堆(heap)
- 数据结构之堆(Heap)
- 【数据结构】堆(heap)
- 数据结构-堆(Heap)
- 数据结构-堆(heap)
- 数据结构:堆Heap
- 数据结构:堆(heap)
- 浅析Python heapq模块 堆数据结构
- STL——heap堆
- Java script事件详解
- 城市交通
- 欢迎使用CSDN-markdown编辑器
- docker 自定义安装 nginx
- Dirt Ratio HDU
- Python中的堆数据结构——heap模块
- java实现验证码功能(只是显示,还没有提交验证功能)
- JS 10
- <C语言>输入一个数求其阶乘(while循环和for循环)
- 利用CSS3做出立方体
- 新版谷歌浏览器ajax跨域访问
- 如何查找进程id号,并且使它停止?
- 8月8日小结
- Python当中的a += a 与 a = a + a 的区别,可变类型与不可变类型的数据类型,引用传参