heapq简析

来源:互联网 发布:淘宝开店资料出售 编辑:程序博客网 时间:2024/05/29 19:41

今天发现了一个很好玩的python模块-heapq

heapq是python核心库之一,运用的是最小堆的排序算法。它保证了列表在一系列操作之后,始终保证了a[0]是最小值。

最小堆排序算法:简单来说,就是数据储存在一个二叉树中,这个二叉树的父结点始终比子结点小,因此根结点就是最小的值。每次取出最小值,只要比较两个子结点就可以决定根的值,下一个最小值也就继续留在a[0]

In [1]: from heapq import *In [2]: h = [2,3,4,1,6,3,5,8,6]In [3]: heappop(h)Out[3]: 2

heappop就是每次取最小值。避免了先排序,然后取值,最后再删除的繁琐步骤。

应用场景还是很广泛的,比如我设计了一个排行榜,每次显示前十名。这里有可以取多组最大和最小值的方法:

In [5]: nlargest(3, h)Out[5]: [8, 6, 6]In [6]: nsmallest(2, h)Out[6]: [1, 3]
另外这个类似于字典的功能更有趣:

In [7]: h = []In [8]: heappush(h, (5, 'shoot'))In [9]: heappush(h, (3, 'fly'))In [10]: heappush(h, (8, 'marry'))In [11]: heappush(h, (4, 'kik'))In [12]: heappop(h)Out[12]: (3, 'fly')
我可以设计个小游戏,把每一节都设计的很碎,然后用以(难度,名称)存储。你可以随意玩,当让我推荐下一步,我就把难度最低的推荐给你。我这边很轻松的去重,也不用排序。

当设计一款智力游戏,是不是可以把获得胜利的可能性都以上述形式储存,然后当玩家希望提示,抛出一个来。

看看过几天是不是有时间,根据这个设计一个小算法出来。
——————————————————

github主页:https://github.com/gt11799 

E-mail:gting405@163.com

0 0