zoukankan      html  css  js  c++  java
  • 实现优先级队列(小根堆)

    头条算法一面,记录一下

    实现优先级队列(小根堆)

     1 class prioQueue:
     2     def __init__(self, elist=[]):
     3         self._elems = list(elist)
     4         if elist:
     5             self.buildheap()
     6     def siftdown(self, e,begin, end):
     7         elems, i, j, = self._elems, begin , begin*2+1
     8         while j < end:
     9             if j+1<end and elems[j+1] < elems[j]:
    10                 j = j + 1         
    11             if e < elems[j]:
    12                 break
    13             elems[i] = elems[j]
    14             i, j = j , 2*j+1
    15         elems[i] = e
    16     def buildheap(self):
    17         end = len(self._elems)
    18         for i in range(end//2,-1,-1):
    19             self.siftdown(self._elems[i],i,end)
    20         return self._elems
    21     def peek(self):                       
    22         return self._elems[0]
    23     def dequeue(self):
    24         elems = self._elems
    25         e0 = elems[0]
    26         e = elems.pop()
    27         if len(elems) > 0:
    28             self.siftdown(e, 0 , len(elems))
    29         return e0
    30     def siftup(self, e, last):
    31         elems , i , j = self._elems, last, (last-1)//2
    32         while i > 0 and e < elems[j]:
    33             elems[i] = elems[j]
    34             i, j = j ,(j-1)//2
    35         elems[i] = e
    36     def enqueue(self, e):
    37         self._elems.append(None)
    38         self.siftup(e, len(self._elems)-1)
    39         return self._elems
  • 相关阅读:
    Lucence_Curd
    Lucence
    SpringMvc文件上传
    SpringMvc接收参数
    出现No qualifying bean of type [com.*.*.dao.InfoDao] found for :错误
    内连接、左外连接、右外连接、交叉连接区别
    html基础
    Java基础阶段综合练习
    java基础MySQL
    java基础IO删除文件夹文件
  • 原文地址:https://www.cnblogs.com/NPC-assange/p/12141762.html
Copyright © 2011-2022 走看看