以下代码的时间复杂性是什么?
def func(n):
for _ in range(n):
if n == 4:
for _ in range(n):
<do something>
对于一个特定输入(n = 4),它只是O(n ^ 2),但对于所有其他输入,它是O(n)。在这种情况下,最坏的情况显然是O(n ^ 2),但我的导师说O(n)是正确的答案。如果“big-Oh”符号表示最坏的情况,为什么不是O(n ^ 2)?
另一个是:
def func2(n):
for _ in range(n):
if n%2 == 0:
for _ in range(n):
<do something>
我不太确定这段代码的运行时间。同样,最坏的情况是O(n ^ 2)。这一次所有可能输入的一半导致最坏的情况。这足以说代码在O(n ^ 2)时间运行吗?
如果第一部分是O(n)而第二部分是O(n ^ 2),那么当您为“大哦”表示选择真正最坏的情况时,是否有一般的经验法则?
答案 0 :(得分:0)
更新
第一种情况是O(n),因为即使n = 4,复杂性也是一个嵌套循环,范围为4,其迭代费用为16次。对于n的所有其他值,它是O(n)。随着n的增长,从未实现n == 4的条件,因此复杂性不会随着n而增长。
在情况2中,对func2的一半调用涉及具有复杂度O(n ^ 2)的内环,这就是整体复杂度为O(n ^ 2)的原因。随着n的增长,时间要求增长为O(n ^ 2)