博客
关于我
堆与堆排序
阅读量:432 次
发布时间:2019-03-06

本文共 1738 字,大约阅读时间需要 5 分钟。

最大堆

class Array(object):    def __init__(self,size=32):        self._size = size        self._items = [None] * size        def __getitem__(self,index):        return self._items[index]    def __setitem(self,index,value):        self._items[index] = value        def __len__(self):        return self._size    def clear(self,value=None):        for _ in range(self._items):            self._items[_] = value        def iter(self):        for _ in self._items:            yield _    class MaxHeap(Array):	def __init__(self,maxsize=None):		self.maxsize = maxsize		self._elements = Array(maxsize)		self._count = 0		def __len__(self):		return self._count	def add(self,value):		if self._count >= self.maxsize:			raise Exception('Full of size')		 self._elements[self._count] = value		 self._count += 1		 self._siftup(self._count-1)	def _siftup(self,idx):		'''		用递归的方法满足最大堆的特性		'''		if idx > 0:			parent = (idx-1) // 2			if self._elements[idx] > self._elements[parent]:				self._elements[idx],self._elements[parent] = self._elements[parent],self._elements[idx]				self._siftup(parent)	def extract(self):		if self._count <= 0:			raise Exception("Empty!!")		value = self._elements[0]		self.clear -= 1		self._elements[0] = self._elements[self._count]		self._siftdown(0)		return value		def _siftdown(self,idx):		left = 2 * idx + 1		right = 2 * idx + 2		largest = idx				if (left < self._count and self._elements[left] >= self._elements[largest] and self._elements[left] > self._elements[right]):			largest = left		elif right < self._count and self._elements[right] >= self._elements[largest]:			largest = right				if largest != idx:			self._elements[largest],self._elements[idx] = self._elements[idx],self._elements[largest]			self._siftdown(largest)

转载地址:http://theyz.baihongyu.com/

你可能感兴趣的文章
Sql Server之旅——第十站 看看DML操作对索引的影响
查看>>
双十一来了,别让你的mongodb宕机了
查看>>
深入浅出访问者模式
查看>>
深入探索Android热修复技术原理读书笔记 —— 热修复技术介绍
查看>>
解析js中( ( ) { } ( ) )的含义
查看>>
js设计模式总结5
查看>>
Python大神编程常用4大工具,你用过几个?
查看>>
一文带你了解图神经网络
查看>>
9个常用ES6特性归纳(一般用这些就够了)
查看>>
3D渲染集群,你了解多少?
查看>>
华为云FusionInsight湖仓一体解决方案的前世今生
查看>>
BootStrapTable 错误
查看>>
罗马数字
查看>>
IO多路复用小故事
查看>>
码云 Pages 搭建
查看>>
《论可计算数及其在判定上的应用》简单理解
查看>>
中国剩余定理证明过程
查看>>
java中Object.equals()简单用法
查看>>
poj 2187 Beauty Contest(凸包求解多节点的之间的最大距离)
查看>>
程序员的开发文档
查看>>