为什么 max 比 sort 慢?

2024-02-21

我发现maxsortPython 2 和 3 中的函数。

Python 2

$ python -m timeit -s 'import random;a=range(10000);random.shuffle(a)' 'a.sort();a[-1]'
1000 loops, best of 3: 239 usec per loop
$ python -m timeit -s 'import random;a=range(10000);random.shuffle(a)' 'max(a)'        
1000 loops, best of 3: 342 usec per loop

Python 3

$ python3 -m timeit -s 'import random;a=list(range(10000));random.shuffle(a)' 'a.sort();a[-1]'
1000 loops, best of 3: 252 usec per loop
$ python3 -m timeit -s 'import random;a=list(range(10000));random.shuffle(a)' 'max(a)'
1000 loops, best of 3: 371 usec per loop

Why is max (O(n))慢于sort功能 (O(nlogn))?


使用时必须非常小心timeitPython 中的模块。

python -m timeit -s 'import random;a=range(10000);random.shuffle(a)' 'a.sort();a[-1]'

这里初始化代码运行一次以生成随机数组a。然后剩余的代码会运行几次。第一次它会对数组进行排序,但每次您都对已排序的数组调用排序方法。仅返回最快的时间,因此您实际上是在计算 Python 对已排序数组进行排序所需的时间。

Python 排序算法的一部分是检测数组何时已部分或完全排序。当完全排序后,它只需扫描一次数组即可检测到这一点,然后停止。

如果您尝试:

python -m timeit -s 'import random;a=range(100000);random.shuffle(a)' 'sorted(a)[-1]'

然后排序发生在每个定时循环上,您可以看到对数组进行排序的时间确实比仅找到最大值要长得多。

Edit:@skyking的answer https://stackoverflow.com/a/35015156/641833解释了我未解释的部分:a.sort()知道它正在处理列表,因此可以直接访问元素。max(a)适用于任何任意迭代,因此必须使用通用迭代。

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

为什么 max 比 sort 慢? 的相关文章

随机推荐

  • 使用 insertWithOnConflict 进行更新或插入

    我需要插入或更新 我找到了 SQLiteDatabase 的 insertWithOnConflict 方法 但我不知道它如何检查该条目是否已存在 理论上 我需要一个 Where 参数来检查某个 ID 是否存在 如果存在 它应该替换所有其他
  • .R中的第一个函数

    我不明白 R 中 First 函数的意义 我的原因是 Rprofile 中的任何代码都将在 R 启动时被获取并执行 this First lt function library devtools and this library devto
  • WordPress:如何按 ACF 自定义字段对内容进行排序?

    通过使用高级自定义字段插件 我创建了一个包含 6 种成员资格类型的选择下拉列表 我使用此自定义字段的所有 列表 都被分配为 6 个字段之一 我想通过以下方式显示所有 列表 终极加号最终的专业的商业的商业 Free 按照这个特定的顺序 那些支
  • 将 JavaScript 变量发送到 PHP 变量 [重复]

    这个问题在这里已经有答案了 首先我认为我必须将 JavaScript 转换为 PHP 但后来我发现我不能 因为服务器和客户端执行 所以现在我只想发送一个变量 到 PHP 变量 当我点击一个按钮时 JavaScript 中的该函数就会执行 现
  • Java 和 .Net 正则表达式

    Java 和 Net Framework 正则表达式模式之间的区别 我正在尝试转换我的 Net Framework 但模式无效 谁能指出正则表达式模式的主要区别 例如我们如何命名java中的分组结构等等 有很多差异总结在这里 http ww
  • 比较 C# 中的双精度值

    I ve a double变量称为x 在代码中 x被赋值为0 1我在 if 语句中检查它比较x and 0 1 if x 0 1 不幸的是它没有进入if陈述 我应该使用Double or double 这背后的原因是什么 您能为此建议一个解
  • Selenium - 无响应脚本错误 (Firefox)

    这个问题以前曾被问过 但给出的答案似乎对我不起作用 问题是 当使用 Selenium 打开页面时 我会收到许多 无响应脚本 弹出窗口 引用不同的脚本 当我使用不带 Selenium 的 Firefox 打开页面时 没有出现任何错误 另外 奇
  • 我可以通过编程方式设置 Mercurial 配置选项吗?

    我正在寻找一种设置方法 hgrc配置项 而无需实际编辑文本文件 我正在尝试标准化设置hgrc跨多个开发人员 我想要一个像这样的命令 hg config ui username foo 但这也将该配置更改保存到hgrc file 看起来这应该
  • 通过 javascript 添加的输入字段不在 PHP $_POST 变量中。如何解决这个问题?

    我在 html 表中有一个表单 我通过 jquery 动态地将输入字段添加到表单中 当我在提交表单时进行 var dump 时 POST 数组没有添加的字段 为什么会发生这种情况 这是我的 js 的样子 add more del areas
  • n 个集合的所有组合的交集

    我需要帮助找到一种有效的算法来解决这个问题 Given n未排序的整数集 找到所有可能的组合n以及它们的交集 例如 Input n 3 Set 1 1 10 6 11 14 3 Set 2 3 7 11 9 5 Set 3 11 6 9 1
  • Protractor - 框架中的错误处理

    我们如何处理基于 Protractor Cucumber 的框架中的错误 有断言失败 这是真正的失败 并且 javascript 代码中存在错误 例如 未找到元素 数组为空 未定义的内容等 我希望以优雅的方式处理后者 目前量角器测试因上述错
  • 限制批处理脚本中生成的进程数量

    我遇到的情况与中描述的情况非常相似这个问题 https stackoverflow com questions 17236456 limiting the number of subshells spawned 但是是批量的 不是外壳 我制
  • 如何使用java解决selenium webdriver中的超时错误?

    My Html
  • macOS 和 XCode 中开发的辅助权限

    有没有办法在开发过程中默认为我在 XCode 中开发的应用程序提供可访问权限 我的想法是 我可以按下运行键并测试新代码 而无需跳过设置中的麻烦 对于部署来说显然这是行不通的 但是对于开发来说有没有办法将应用程序列入白名单 EDIT 这是我发
  • 在 Rails 3 中过滤 has_many :through 关系中的子对象

    问候 我有一个应用程序 其中Companies and Users需要通过某种方式彼此归属CompanyMembership模型 其中包含有关成员资格的额外信息 具体来说 用户是否是公司的管理员 通过布尔值admin 代码的简单版本 cla
  • 如何获取PDF的书签并将书签添加到新的pdf中?

    我正在将一个 PDF 合并到其他 PDF 它工作正常 但最终 PDF 中缺少书签 以下是PDF生成代码 Create One Page PDF with some text from reportlab pdfgen import canv
  • 使用标准库对 Agda 中的对/列表进行字典顺序排序

    Agda标准库包含一些模块Relation Binary Non StrictLex 目前仅适用于Product and List 我们可以使用这些模块轻松构建一个实例 例如IsStrictTotalOrder对于自然数对 即 open i
  • 我想用动画将 imageview 放置在不同的位置

    我试图在不同的位置设置多个图像 这是我的代码 任何人都可以帮助我在不同的位置设置 imageview void viewDidLoad super viewDidLoad frameX 45 0f frameY 60 0f imagearr
  • 如何使用迭代器迭代二维向量? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 all 我在 C STL 中使用向量来存储我的数据 我将它们传递到函数中或从函数中返回它们 然而 随着数据大小的增长 程序越来越慢 因此
  • 为什么 max 比 sort 慢?

    我发现max比sortPython 2 和 3 中的函数 Python 2 python m timeit s import random a range 10000 random shuffle a a sort a 1 1000 loo