Python中min和max的大O.

时间:2016-02-13 23:25:25

标签: python algorithm big-o

Python中minmax函数的大O是多少?它们是O(n)还是Python有更好的方法来查找数组的最小值和最大值?如果它们是O(n),使用for循环找到所需的值或者它们与for循环的工作方式相同是不是更好?

4 个答案:

答案 0 :(得分:6)

这是O(n)。这是一种通用算法,如果不检查所有这些,就无法在一般情况下找到最大值/最小值。 Python甚至没有内置的有序集合类型,这使得检查很容易专门化。

答案 1 :(得分:2)

要查找序列的最大值或最小值,必须查看每个元素一次,这样才能比O(n)更好。

当然,Python minmax也有O(n):docs

您可以使用for循环编写自己的最小/最大函数,它将具有相同的复杂性,但会因为未在C中进行优化而变慢。

答案 2 :(得分:0)

它们都是O(n),并且无法在数组中找到min max。实际上,min / max的底层实现是for循环。

答案 3 :(得分:0)

正如(理论上)一般情况中所述,找到未排序值集合的最小值或最大值需要您查看每个值(因此O(N)),因为如果您不看一个值, 值可能大于集合的所有其他值。

  

[..]使用for循环来查找所需的值或者它们与for循环的工作方式相同是不是更好?

没有。编程是关于抽象的:隐藏一个奇特名称背后的实现细节(那个循环)。否则你可以在汇编中编写那个循环,不能吗?

现在为#34;特别" case:我们通常不会使用任意大数字。假设一个2位无符号整数:唯一可能的值是0,1,2和3.只要在某些(任意大的)集合中找到3,就可以确定没有更大的值。在这样的情况下,进行特殊检查以了解是否已找到最大(最小)可能值是有意义的。