关闭

Python数据结构----最大堆

标签: 数据结构python
682人阅读 评论(0) 收藏 举报
分类:

基于array实现最大堆,当事先知道堆的最大容量时通常可以用array实现。如果最大容量无法确定,那么可以使用list替代。

import array as Array
class MaxHeap:
  def __init__(self,maxSize):
    self._elements = Array(maxSize)
    self._count = 0

  def __len__( self ):
    return self._count

  def capacity( self ):
    return len( self._elements )

  def add( self, value ):
    assert self._count < len( self._elements ), ""
    self._elements[self._count] = value
    self._count += 1
    self._siftUp( self._count - 1 )

  #delete maximum from heap
  def extract( self ):
    assert self._count > 0,""
    value = self._elements[0]
    self._elements[0] = self._elements[self._count-1]
    self._siftDown(0)

  def _siftUp( self, ndx ):
    if ndx > 0 :
      parent = ndx // 2
      if self._elements[ndx] > self._elements[parent]:
        tmp = self._elements[parent]
        self._elements[parent] = self._elements[ndx]
        self._elements[ndx] = tmp
        self._siftUp( parent )

  def _siftDown( self, ndx ):
    left = 2 * ndx + 1
    right = 2* ndx + 2
    largest = ndx
    if left < count and  self._elements[left] >= self._elements[largest]:
      largest = left
    if right < count and  self._elements[right] >= self._elements[largest]:
      largest = right
    if largest != ndx:
      swap( self._elements[ndx], self._elements[largest] )
      _siftDown( largest )
0
0
查看评论

Python的heapq模块实现大顶堆,小顶堆

Python的堆,优先队列实现非常方便,使用heapq模块就可以了 基本的api: ans = [] heapq.heapqpush(ans,1) 这段代码把ans看作一个小顶堆,把1push进这个堆里面 要是想取这个堆的最小值(小顶堆嘛),直接取ans[0] 就行了 heapq.heap...
  • u010770184
  • u010770184
  • 2016-11-26 10:55
  • 810

用最大堆模拟最大优先级序列(Python实现)

####为了不失一般性,本文采用的是d叉堆实现。 代码如下:# -*- coding:utf-8 -*- # 此时假设的的 d = 4 def ListMax(s): '''返回列表s中的最大值的下标''' max = 0 ...
  • bojdoog
  • bojdoog
  • 2016-01-14 22:09
  • 323

最大堆和最小堆

堆和栈的区别:   一、堆栈空间分配区别:   1、栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈;   2、堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。   二、堆栈...
  • jyl1999xxxx
  • jyl1999xxxx
  • 2016-06-02 20:28
  • 1151

浅析Python heapq模块 堆数据结构

堆的定义堆是一种特殊的树形数据结构,每个节点都有一个值,通常我们所说的堆的数据结构指的是二叉树。堆的特点是根节点的值最大(或者最小),而且根节点的两个孩子也能与孩子节点组成子树,亦然称之为堆。 堆分为两种,大根堆和小根堆是一颗每一个节点的键值都不小于(大于)其孩子节点的键值的树。无论是大根堆还是小...
  • minxihou
  • minxihou
  • 2016-07-08 01:42
  • 11988

用Python实现八大排序算法--堆排序

一、堆排序概述1.堆是一种数据结构 可以将堆看作一棵完全二叉树,这棵二叉树满足,任何一个非叶节点的值都不大于(或不小于)其左右孩子节点的值。 2.堆的存储 一般用数组来表示堆,若根节点存在于序号0处,i结点的父结点下表就为(i-1)/2,i结点的左右子结点下标分别为2i+1和2i+23.堆排序...
  • chibangyuxun
  • chibangyuxun
  • 2016-11-03 09:30
  • 1347

利用Python实现堆排序

在这里要事先说明一下我也是新手,很多东西我了解不是很深入,写算法完全是锻炼自己逻辑能力同时顺带帮助读研的朋友么解决一些实际问题。所以很多时候考虑的东西不是很全面能请各位看到博文的大牛们指正。对于排序算法说实在的我觉得已经写烂了,但是为什么还是要过一遍呢?还是为了能够打牢基础。说一下自己的看法,对于已...
  • minxihou
  • minxihou
  • 2016-07-07 11:41
  • 4902

python 堆和优先队列的使用

1.heapqpython里面的堆是通过在列表中维护堆的性质实现的。这一点与C++中heap一系列的算法类似,底层是通过堆vector的维护获取堆的性质。 python堆的部分API,其他API查阅文档python_heap_API和 heapq的源代码import heapq #向堆中插入元素...
  • liu2012huan
  • liu2012huan
  • 2016-11-21 21:39
  • 6461

Python -- 堆数据结构 heapq

import heapq help(heapq) heapq 是一个最小堆,堆顶元素 a[0] 永远是最小的. 和 Java 中的优先队列类似. ------------------------------------------------- Help on module hea...
  • zklth
  • zklth
  • 2012-09-17 14:56
  • 21293

python使用heapq实现小顶堆(TopK大)/大顶堆(BtmK小)

参考链接https://www.coder4.com/archives/3844求一个数列前K大数的问题经常会遇到,在程序中一般用小顶堆可以解决,下面的代码是使用python的heapq实现的小顶堆示例代码: # !/usr/bin/env python # -*- coding:gb...
  • tanghaiyu777
  • tanghaiyu777
  • 2017-02-16 19:16
  • 991

5.4 heapq--堆队列算法

本模块实现了堆队列算法,也叫作优先级队列算法。堆队列是一棵二叉树,并且拥有这样特点,它的父节点的值小于等于任何它的子节点的值,如果采用数组array实现,可以把它们的关系表示为:heap[k] 和 heap[k] ,对于所有k值都成立,k值从0开始计算。作为比较,可以认...
  • caimouse
  • caimouse
  • 2016-01-16 18:49
  • 3071
    个人资料
    • 访问:9632次
    • 积分:359
    • 等级:
    • 排名:千里之外
    • 原创:13篇
    • 转载:5篇
    • 译文:14篇
    • 评论:3条