给定一个真正的运行时,如何计算运行时复杂度(`" O(m)"`)?

时间:2013-11-14 16:36:06

标签: performance algorithm runtime time-complexity asymptotic-complexity

我很快就会问:

我有一个算法,作为一个函数,我们称之为f

void f(int[1..N]) {
   // algorithm goes here
}

现在,real runtime输入N

请假设函数time()以毫秒为单位返回当前系统的时间。

int[1...N] n;
unsigned long start = time(), end; 
f(N); 
end = time();
printf("Real runtime: %ul", end - start);

换句话说,我知道参数fN运行多少毫秒。

根据此信息,如何计算f(N)运行时复杂度,即f = O(N)

1 个答案:

答案 0 :(得分:5)

对于不同的N,您将需要多个数据点。

假设你得到这些统计数据:

N     time(ms)
4       12
8       24
16      48

在这种情况下,加倍N会使时间加倍,因此您的复杂度必须为O(N)。

但是如果你得到这些统计数据

N     time(ms)
4       16
8       64
16      256

在这种情况下,加倍n会使运行时增加四倍,因此复杂度必须为O(n2)。

如果时间没有改变,你的复杂性就是O(1)

同样,不同的数据点可以让你确定满足大(O)的函数。不同N的点数越多,就越能确定该函数。