zoukankan      html  css  js  c++  java
  • py中的heapq操作

    https://blog.csdn.net/chandelierds/article/details/91357784,这个讲的很不错

    1.往堆中添加元素

    import heapq
    a = []   #创建一个空堆
    heapq.heappush(a,18)
    heapq.heappush(a,1)
    heapq.heappush(a,20)
    heapq.heappush(a,10)
    heapq.heappush(a,5)
    heapq.heappush(a,200)
    print(a)

    [1, 5, 20, 18, 10, 200]

     就是对list进行操作,py中没有堆的类。

     py中的这个是小根堆,若要建大根堆,可以加负号。

    2.建堆

    一个list经过heapfy之后,就可以变成小根堆,否则也只是根据原来的顺序遍历。

    import heapq
    a = [1, 5, 20, 18, 10, 200]
    heapq.heapify(a)#这里直接对a进行修改,不返回任何东西
    print(a)
    
    [1, 5, 20, 18, 10, 200]

    3.弹出

    import heapq
    a = [1, 5, 20, 18, 10, 200]
    heapq.heapify(a)
    print(heapq.heappop(a))#当然此时的a是经过heapfy的,否则如果只是针对普通list的话,是不会弹出最小值的。
    
    1

    4.

    另外还有其他函数,这里就不写了,包括heappushpop、heapreplace(heap.item)、merge、nlargest、nsmallest。

    原博客中还有对topN的算法的比较。还有对heapq各种操作的时间复杂度介绍。

  • 相关阅读:
    Java中断机制
    RPC原理
    synchronized和ReentrantLock的区别
    dubbo入门
    Zookeeper入门
    分布式事务
    Mysql索引会失效的几种情况
    java代码执行过慢的问题定位
    持续集成
    Mycat 数据库分库分表中间件
  • 原文地址:https://www.cnblogs.com/BlueBlueSea/p/13719045.html
Copyright © 2011-2022 走看看