zoukankan      html  css  js  c++  java
  • python 二叉堆

    • BinaryHeap() 创建一个新的,空的二叉堆。
    • insert(k) 向堆添加一个新项。
    • findMin() 返回具有最小键值的项,并将项留在堆中。
    • delMin() 返回具有最小键值的项,从堆中删除该项。
    • 如果堆是空的,isEmpty() 返回 true,否则返回 false。
    • size() 返回堆中的项数。
    • buildHeap(list) 从键列表构建一个新的堆。
    from pythonds.trees.binheap import BinHeap
    
    bh = BinHeap()
    bh.insert(5)
    bh.insert(7)
    bh.insert(3)
    bh.insert(11)
    
    print(bh.delMin())
    
    print(bh.delMin())
    
    print(bh.delMin())
    
    print(bh.delMin())
    class BinHeap:
        def __init__(self):
            self.heapList = [0]
            self.currentSize = 0
    
    
        def percUp(self,i):
            while i // 2 > 0:
              if self.heapList[i] < self.heapList[i // 2]:
                 tmp = self.heapList[i // 2]
                 self.heapList[i // 2] = self.heapList[i]
                 self.heapList[i] = tmp
              i = i // 2
    
        def insert(self,k):
          self.heapList.append(k)
          self.currentSize = self.currentSize + 1
          self.percUp(self.currentSize)
    
        def percDown(self,i):
          while (i * 2) <= self.currentSize:
              mc = self.minChild(i)
              if self.heapList[i] > self.heapList[mc]:
                  tmp = self.heapList[i]
                  self.heapList[i] = self.heapList[mc]
                  self.heapList[mc] = tmp
              i = mc
    
        def minChild(self,i):
          if i * 2 + 1 > self.currentSize:
              return i * 2
          else:
              if self.heapList[i*2] < self.heapList[i*2+1]:
                  return i * 2
              else:
                  return i * 2 + 1
    
        def delMin(self):
          retval = self.heapList[1]
          self.heapList[1] = self.heapList[self.currentSize]
          self.currentSize = self.currentSize - 1
          self.heapList.pop()
          self.percDown(1)
          return retval
    
        def buildHeap(self,alist):
          i = len(alist) // 2
          self.currentSize = len(alist)
          self.heapList = [0] + alist[:]
          while (i > 0):
              self.percDown(i)
              i = i - 1
    
    bh = BinHeap()
    bh.buildHeap([9,5,6,2,3])
    
    print(bh.delMin())
    print(bh.delMin())
    print(bh.delMin())
    print(bh.delMin())
    print(bh.delMin())
  • 相关阅读:
    linux cmake安装方法
    Linux下安装numpy
    linux下安装opencv3.0
    linux升级gcc
    php session获取不到的解决方法
    python Tesseract安装方法
    SQLite-编译指示
    第十章:定积分
    7. 错误、调试和测试
    钱纳里的工业化阶段理论
  • 原文地址:https://www.cnblogs.com/Erick-L/p/7228152.html
Copyright © 2011-2022 走看看