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())
  • 相关阅读:
    Python零基础入门的基础案例
    今天不抠图,Python实现一键换底片!想换什么换什么(附源码)
    python基础:如何使用 pip 安装第三方库
    Python教程:matplotlib 绘制双Y轴曲线图
    福利来啦,送给大家一个小游戏的源码,不要错过哟
    招聘信息太多,哪家职位才是适合你的?Python采集招聘信息
    我的python菜鸟之路1
    我的SAS菜鸟之路3
    我的SAS菜鸟之路2
    猪鹿蝶1
  • 原文地址:https://www.cnblogs.com/Erick-L/p/7228152.html
Copyright © 2011-2022 走看看