嵌套循环的时间复杂性,包括if语句

时间:2017-06-22 03:20:20

标签: time-complexity nested-loops

我不确定以下代码的一般时间复杂性。

Sum = 0
for i = 1 to N
    if i > 10
        for j = 1 to i do
            Sum = Sum + 1

假设i和j增加1。 我知道第一个循环是O(n),但第二个循环只在N> 1时运行。 10.一般时间复杂度是否为O(n ^ 2)?非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

考虑Big O Notation的定义。

________________________________________________________________

f :ℜ→ℜ和 g :ℜ→ℜ。

然后, f x )= O g X )) ⇔ ∃ k ∈ℜℜ∋ M > 0∈ℜℜ∋ x k ,| f x )| ≤ M ⋅| g x )|

________________________________________________________________

可以不那么正式地阅读:

________________________________________________________________

f g 成为实数子集上定义的函数。

然后, f g O ,如果足够大 x ' s(这是 k 在正式定义中的含义)有一个常量 M (当然来自实数),这样< em> M 次 g x )总是大于或等于(实际上,你可以增加 M 它总会更大,但我退步了) f x )。

________________________________________________________________

(你可能会注意到,如果一个函数是 O n ),那么它也是 O n ²)和O( e ^ n ),但当然我们通常对“最小”函数 g 感兴趣,这样它是 O g )。事实上,当有人说 f O g 那么他们几乎总是意味着 g 是最小的这样的函数。)

让我们将其转化为您的问题。让 f N )为您的过程完成 N 的功能所需的时间。现在,假装添加需要一个单位时间来完成(并检查if语句并增加for循环,不需要时间),然后

f (1)= 0

f (2)= 0

...

f (10)= 0

f (11)= 11

f (12)= 23

f (13)= 36

f (14)= 50

我们希望找到一个 g N )函数,以便 N 值足够 f N )≤M· g N )。我们可以通过 g N )= N ²来满足这个要求,而 M 只能是1(也许它可以要小一些,但我们并不在乎。在这种情况下,足够大意味着大于10(当然, f 仍然小于 M g 对于 N &lt; 11)。

tl; dr:是的,一般时间复杂度为 O n ²),因为Big O假定你的N要去无穷大。

答案 1 :(得分:1)

让我们假设你的代码是

Sum = 0
for i = 1 to N
   for j = 1 to i do
       Sum = Sum + 1

总共有N^2次总和操作。使用if i > 10的代码会减少10^2次总和操作。因此,对于足够大的N,我们有

N^2 - 10^2 

操作。那是

O(N^2) - O(1) = O(N^2)