时间复杂嵌套for循环的复杂性

时间:2014-04-01 04:17:44

标签: python for-loop time-complexity

以下代码的时间复杂性是什么?

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),那么当您为“大哦”表示选择真正最坏的情况时,是否有一般的经验法则?

1 个答案:

答案 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)