heapq简析

今天发现了一个很好玩的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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值