n最大和n最小;堆Python

2024-03-23

这是出于对 python 中 heapq.py 模块的 nsmallest 和 nlargest 方法的好奇。

我正在读它here https://docs.python.org/2/library/heapq.html#在文档中。

文档没有说明它如何在任何可迭代上执行此操作(nsmalles/nlargest)。

这可能是一个愚蠢的问题,但是我可以假设这些方法在内部创建一个可迭代数据结构的堆(可能使用“heapify”方法),然后返回 n 个最小/最大元素吗?

只是想证实我的结论。谢谢!


寻找的算法n可迭代的最小或最大项目N项目有点棘手。你看,你没有创建一个尺寸-Nmin-heap 查找最小的项目。

相反,你会制作一个更小的尺寸-n最大堆与第一个n项目,然后重复pushpop使用序列中的剩余项目对其进行操作。完成后,您可以从堆中弹出项目并以相反的顺序返回它们。

这个过程需要O(N log(n))时间(注意小n)当然只有O(n)空间。如果n远小于N,比排序和切片效率高很多。

The heapq module https://hg.python.org/cpython/file/default/Lib/heapq.py包含该算法的纯 Python 实现,尽管当您导入它时,您可能会获得用 C 编写的代码的更快版本(您可以阅读的来源 https://hg.python.org/cpython/file/default/Modules/_heapqmodule.c也是如此,但除非您了解 Python C API,否则它不太友好)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

n最大和n最小;堆Python 的相关文章

随机推荐

  • 与Netty相比,vert.x如何实现卓越的性能?

    最近的TechEmpower 性能基准 http www techempower com benchmarks 一直在 Netty 之上展示 vert x 有时数量很大 根据其网站 vert x 使用 Netty 来实现 大部分网络 IO
  • jquery:无法获取div的“value”属性

    这是我的 chrome javascript 控制台的屏幕截图 展示了我的困境 我真的无法理解为什么我无法获取 值 属性 class 属性工作得很好 所以我认为同样应该适用于 value 我在我的应用程序中测试的代码 coffeescrip
  • 没有WebRTC的nodeJS中的简单SIP电话

    您好 我需要实现类似 SIP 电话的功能 但使用不带 WebRTC 的 经典 SIP 大多数 JS 库都专注于基于 websockets 和 WebRTC 的 SIP 但在我的基础设施中 我没有 WebSocket 有像 JsSIP 这样的
  • PHP preg_match_all:提取逗号分隔列表

    例如 我有以下字符串 WIDGET TEST abc 456 我希望能够使用 preg match all 返回逗号分隔参数的数组 有人可以帮我解决我需要的正则表达式吗 我已经尝试过 并且返回以下查询 a b preg match all
  • 方案中的延续传递风格?

    我遇到了这段代码在维基百科上 http en wikipedia org wiki Continuation passing style define pyth x y k x x lambda x2 y y lambda y2 x2 y2
  • 图像 PropertyItems 和已处置的 MemoryStream

    我正在加载一个Image from a byte using MemoryStream并通过检查图像来获取有关图像的信息ProperyItems 但在这样做的过程中 我注意到一些奇怪的行为 其中一些图像的PropertyItems正在消失
  • sqlite:如何获取组计数

    我在网站上有一个用户操作的 SQLite 表 每一行都是网站上的相同操作 只是时间 日期不同 并用用户 ID 标记 该表有超过 2000 万条条目 我了解如何使用按用户 ID 进行分组的功能来获取用户计数 即 A 执行了 3 次操作 B 4
  • 键入字符时搜索字符串

    我的手机中存储了联系人 假设我的联系人是 Ram Hello Hi Feat Eat At 当我打字时 A 我应该得到所有匹配的联系人说 Ram Feat Eat At 现在我再输入一个字母T 现在我的总字符串是 AT 现在我的程序应该重用
  • 序列不包含匹配元素 - 使用 LINQ 返回与自定义属性匹配的 SiteMapNode

    我有一个 Web sitemap 文件 使用siteMapNodeXML 中的元素 我已为每个标签添加了自定义属性 我正在尝试提取自定义属性的值id 我想找一个单身siteMapNode in the SiteMapNodeCollecti
  • 使用 PHP 和 MySQL 创建多维数组

    我是 PHP 新手 正在寻找从数据库返回数据的有效方法 假设我有一个 UserProfile 表 它与 UserInterest 和 UserContact 具有一对多关系 Select p Id p FirstName p LastNam
  • ItemsControl 和 Canvas 中的多个数据模板

    我试图在画布上显示一些框 我自己的 userControl 在其自己的名为 singleNodeControl 的 xaml 文件中定义 并用线连接它们 普通 xaml Line 元素绑定到 LineToParent 类 这两项都存储在 v
  • 使用 PHPExcel 读取电子表格

    我正在尝试上传电子表格并使用 PHPExcel 将其读入 MySQL 数据库 对于 xlsx 文件 它工作正常 但每当我尝试上传 ods 文件时 它都会抛出错误 PHP Fatal error Call to a member functi
  • 如何使用 C# 更新数据透视表数据源?

    我想知道如何更新现有的数据透视表数据源 我在用Microsoft Office Interop Excel并针对使用 Excel 2010 的用户 我目前能够刷新工作正常的数据透视表 但是当添加更多行时 我希望将这些行包含在数据透视表数据源
  • WPF:我可以强制窗口重新评估其所有绑定和验证吗?

    我可以强制窗口重新评估其所有绑定和验证吗 由于某种原因 它似乎在一种奇怪的情况下忽略了 INotifyPropertyChanged PropertyChanged 我正在寻找一种解决方法 直到找到真正的原因 不幸的是 我知道没有办法强制窗
  • 如何在Linux中安装chrome(无头)

    我有一个运行 linux redhad 的 AWS EC2 有没有办法在上面安装最新的 Chrome v59 以便我可以像 PhantomJS 一样以无头模式运行它 我在 google 上能找到的所有资源都是关于如何在有 UI 的 ubun
  • 无法转换“UICollectionViewCell”类型的值

    我在 Storyboard 中使用自定义 CollectionViewCell 当我启动应用程序时 我收到以下消息 无法将 UICollectionViewCell 类型的值转换为 TestProject CollectionViewCel
  • 框架在不同时间绘画? [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我的游戏中有一个非常烦人的错误 帧的底部似乎比帧的顶部渲染得更早 我不确定为什么会发生这种情况 我正在使用 JPanel
  • Python 的 bool 值是按值传递的吗?

    我发送了对 bool 对象的引用 并在方法中修改了它 方法执行完毕后 方法外的bool值没有变化 这让我相信 Python 的 bool 是按值传递的 真的吗 还有哪些其他 Python 类型有这样的行为 Python 变量不是 C 意义上
  • Pip 安装日志在哪里?

    为什么 pip 不记录何时安装了哪个版本的库 如果您将库更新为损坏的版本怎么办 你怎么知道哪个版本没有被破坏 那些对此投赞成票的人 你能告诉我你为什么这样做吗 运行 pip 时 您可以指定日志文件 这样您就可以在将来跟踪安装日志 pip i
  • n最大和n最小;堆Python

    这是出于对 python 中 heapq py 模块的 nsmallest 和 nlargest 方法的好奇 我正在读它here https docs python org 2 library heapq html 在文档中 文档没有说明它