算法的大O.

时间:2014-03-03 20:04:09

标签: big-o

我有一个非常简单的问题,但是我不确定实际的运行时(例如Big-O)是什么。

程序看起来像这样。

n <- user input
for i=1 to n
    foo(i)

foo a:
for i=1 to a
    foo2()

foo2做了几乎不变的工作,但这并不重要。

这是什么大事?

2 个答案:

答案 0 :(得分:3)

对于每个整数0&lt; = i&lt; = n,存在另一个循环,其变为0&lt; = j&lt; = i。

因此,第i个整数需要我调用foo2()

超过n个整数,这相当于每个整数{/ 1}}的平均(n / 2)个额外调用 -

foo2()

相同

n + (n - 1) + ... + 1 + 0

n + (n - 1 + 1) + ... + (n - n/2 + n/2)

由于复杂性的上限为n * (n / 2),其增长速度将与n^2 / 2,一样快 - 因此复杂度为n^2

答案 1 :(得分:1)

(假设内部函数foo2()是Θ(1))

它是Θ(n ^ 2),因为外部循环对所有i=1...n执行一次,内循环每次外循环迭代迭代i次,这使得总共{{1}执行sum(i) from i=1 to n,等于foo2()次。

Θ(n ^ 2)意味着O(n ^ 2)。

相关问题