首页 > 编程 > Python > 正文

[硕.Love Python] Heap(堆)

2019-11-11 03:14:55
字体:
来源:转载
供稿:网友
class MinHeap(object):    def __init__(self, iterable=()):        self.array = [None]        self.array.extend(iterable)        self.build()     def build(self):        a, size = self.array, self.size()        for in xrange(size / 20-1):            = 2 * i            while c <= size:                if + 1 <= size and a[c+1] < a[c]:                    += 1                 if a[c] > a[c/2]:                    break                 a[c], a[c/2= a[c/2], a[c]                *= 2     def insert(self, k):        self.array.append(k)        a, i = self.array, self.size()         while i > 1 and k < a[i/2]:            a[i] = a[i/2]            /= 2         a[i] = k     def pop(self):        size = self.size()        if size == 0:            raise IndexError('pop from empty heap')         = self.array        res = a[1]        last = a.pop()        size -= 1         if size > 0:            = 2 * 1             while c <= size:                if + 1 <= size and a[c+1] < a[c]:                    += 1                 if a[c] >= last:                    break                 a[c/2= a[c]                *= 2             a[c/2= last         return res     def size(self):        return len(self.array) - 1 if __name__ == '__main__':    from random import shuffle    data = range(50)    shuffle(data)    PRint data    = MinHeap(data)     for in xrange(len(data)):         print h.pop()

刘硕老师Python精品课程:

《Python高级编程技巧实战》:

http://coding.imooc.com/class/62.html

 

《Python算法实战视频课程》:

http://edu.csdn.net/combo/detail/174

 

《Python科学计算—NumPy实战课程》:

http://edu.51cto.com/course/course_id-5046.html

 

熊猫TV直播间:

http://www.panda.tv/671023


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表