【问题标题】:How efficient is Python's max functionPython的max函数有多高效
【发布时间】:2011-07-24 03:59:21
【问题描述】:

函数max() 返回列表中的最大元素。 . .就Big O notation 而言,它的运行时间是多少(在 Python 3 中)?

【问题讨论】:

    标签: python performance python-3.x big-o


    【解决方案1】:

    这取决于您如何使用它。 如果你想基于函数“someFunc”进行最大化,则需要O(len(l)*k),其中 k 是函数“someFunc”运行所需的时间。

    maxVal = max(l, key=somefunc)
    

    但是对于正常情况,它应该只遍历列表并使用正常的比较函数找到最大值。

    【讨论】:

      【解决方案2】:

      这是 O(n),因为它必须检查每个元素。如果您想获得更好的最大性能,可以使用heapq 模块。但是,你必须negate each value,因为heapq 提供了一个最小堆。向堆中插入一个元素是 O(log n)。

      【讨论】:

      • 将 n 个元素插入堆是 O(n log n)。
      • @Greg,是的,我的意思是插入一个元素。
      • @Greg Hewgill:(至少如果您自己实现它)可以将n 元素添加到O(n) 的堆中(只需以相反的顺序调用siftdown )。
      • 列表中的最大元素... 如果列表是一般的(未排序或以其他方式组织,则没有办法比 O(n) 更好——除非你有多处理器,并行系统。
      • 我相信@pepr 是对的。无论如何,我是否不必查看列表中的每个项目才能将其添加到 heapq / 优先级队列中,因此 O(n)?
      【解决方案3】:

      当然它是 O(n),除非您使用不同的数据结构来支持值集合的最大值,因为某些实现不变量。

      【讨论】:

        猜你喜欢
        • 2011-10-12
        • 2016-08-31
        • 1970-01-01
        • 2015-08-16
        • 2014-12-11
        • 2013-06-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多