我有一个非常简单的问题,但是我不确定实际的运行时(例如Big-O)是什么。
程序看起来像这样。
n <- user input
for i=1 to n
foo(i)
foo a:
for i=1 to a
foo2()
foo2做了几乎不变的工作,但这并不重要。
这是什么大事?
答案 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)。