计算上限和下限的证人

时间:2012-04-06 15:52:08

标签: big-o

我正在研究程序的运行时间,并且遇到了Big O表示法。要求一个人通过证明存在整数T(n)和常数O(f(n))来证明xc > 0,以便对所有整数n >= xT(n) <= cf(n) }。

我见过的例子通过“挑选”xc的值来证明这一点。我了解您可以将值插入等式并查看它们是否正确,但有没有办法实际计算xc?或者,至少,关于如何挑选它们的一些经验法则,这样就不会无休止地插入价值观?

1 个答案:

答案 0 :(得分:0)

这些值来自算法T的检查。例如,当你有一个简单的循环:

for (i=0; i < n; ++i) {
  sum += i;
}

然后执行操作i<n++isum+=i n次,i=0执行一次。所以f(n)==nc==4(对于四个操作,将“一次”提升为“n次”以确保值的正确性),x==1(对于n==0,您仍然执行i=0i<n,因此公式不起作用)。这为您提供了O(n)性能(输入数量的线性)。

对于嵌套循环:

for (i=0; i < n; ++i) {
  for (j=0; j<n; ++j) {
    sum += j;
  }
}

计算类似于f(n)==n^2,给你O(n ^ 2)。

因此,没有简洁的方法来说明cx的确切值,但大部分时间难以提出f - 根据你提供的定义,O(n ^ 2)算法也是一个O(n ^ 3)算法,但你想用O(n ^ 2)而不是O(n ^ 2)来表征该算法。为O(n ^ 3))。 f s的排序取决于n接近无穷大时的增长:f(n)=n^3增长慢于f(n)=2^n,即使前者为n的小x大于后者。

请注意,理论上cn的实际值会随着O(n)接近无穷大而变得无关紧要,这就是为什么它们不会显示在n表示法中的原因本身。这并不意味着,对于f(n)的(相对)小值,指令数量不会比{{1}}大很多(例如,for循环中有1000条指令)。

此外,O(n)表示法为您提供最差性能,可能远高于您在现实生活中观察到的(平均情况成本)或数据结构的整体使用情况(摊销成本),例如。