Python中min
和max
函数的大O是多少?它们是O(n)
还是Python有更好的方法来查找数组的最小值和最大值?如果它们是O(n)
,使用for循环找到所需的值或者它们与for循环的工作方式相同是不是更好?
答案 0 :(得分:6)
这是O(n)
。这是一种通用算法,如果不检查所有这些,就无法在一般情况下找到最大值/最小值。 Python甚至没有内置的有序集合类型,这使得检查很容易专门化。
答案 1 :(得分:2)
要查找序列的最大值或最小值,必须查看每个元素一次,这样才能比O(n)更好。
当然,Python min
和max
也有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,就可以确定没有更大的值。在这样的情况下,进行特殊检查以了解是否已找到最大(最小)可能值是有意义的。