Python -- 堆数据结构 heapq
来源:互联网 发布:tomcat7内存配置优化 编辑:程序博客网 时间:2024/05/29 17:20
import heapq
help(heapq)
heapq 是一个最小堆,堆顶元素 a[0] 永远是最小的. 和 Java 中的优先队列类似.
-------------------------------------------------
Help on module heapq:
NAME
heapq - Heap queue algorithm (a.k.a. priority queue).
FILE
/usr/lib64/python2.4/heapq.py
DESCRIPTION
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(...)
Push item onto heap, maintaining the heap invariant.
heapreplace(...)
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)
nlargest(...)
Find the n largest elements in a dataset.
Equivalent to: sorted(iterable, reverse=True)[:n]
nsmallest(...)
Find the n smallest elements in a dataset.
Equivalent to: sorted(iterable)[:n]
构建元素个数为 K=5 的最小堆代码实例:
#!/usr/bin/env python# -*- encoding: utf-8 -*-# Author: kentzhan#import heapqimport randomheap = []heapq.heapify(heap)for i in range(15): item = random.randint(10, 100) print "comeing ", item, if len(heap) >= 5: top_item = heap[0] # smallest in heap if top_item < item: # min heap top_item = heapq.heappop(heap) print "pop", top_item, heapq.heappush(heap, item) print "push", item, else: heapq.heappush(heap, item) print "push", item, pass print heappassprint heapprint "sort"heap.sort()print heap结果:
- Python -- 堆数据结构 heapq
- 浅析Python heapq模块 堆数据结构
- [Python]heapq 堆模块
- python: 堆操作 (heapq库)
- python 堆结构 heapq模块
- 从一个集合中查找最大最小的N个元素——Python heapq 堆数据结构
- python heapq
- python heapq
- python-heapq
- heapq--Python列表的最小堆排序算法
- [Python标准库]heapq——堆排序算法
- Python heapq模块
- Python heapq模块
- Python heapq模块
- Python heapq priority queue
- Python 妙用heapq
- Python 库之heapq
- Python中的heapq模块
- Android学习:在SD卡上建立文件夹
- Oracle HANGANALYZE 功能诊断 DB hanging
- Eclipse调试Java的10个技巧
- struts2新特性预览
- InfoSymbol中的infoRenderer属性的使用方法(学习笔记)
- Python -- 堆数据结构 heapq
- mysql 海量数据的存储和访问解决方案
- 安装、设置和使用SSH Secure shell 实现windows 登录linux
- MongoDB 管理
- eclipse 添加 Courier New 字体
- 黑马程序员-----java基础十八(java之IO流)
- 一位老Programer:离职引发的他内心的诸多感触
- 简单的java静态导入
- VC编译错误:msvcrtd.lib(ti_inst.obj) : error LNK2005: "private: __thiscall type_info::type_info(class typ