• 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())
  • 相关阅读:
    seurat 单细胞数据分析中 VizDimLoadings 函数
    R语言中unname函数
    R语言中 %||%什么意思?
    R语言中lapply函数
    R语言中当数据只有一列时,提取数据,增加drop = FALSE保证提取后的数据仍然为数据框
    R语言中条件表达语句ifelse语句
    R语言中依据数据框元素筛选元素
    seurat 单细胞数据分析中 VariableFeaturePlot函数实现
    R语言中any运算符是什么意思
    weixueyuanNginx核心配置指令2
  • 原文地址:https://www.cnblogs.com/Erick-L/p/7228152.html
Copyright © 2020-2023  润新知