Big O表示法:功能体的总和

时间:2014-01-24 19:32:56

标签: algorithm big-o

如果一个函数体调用3个不同的函数,所有的顺序O(n),我如何计算外部(包含)函数的顺序?是的,这是家庭作业,我出乎意料地未能在教科书中找到相关的例子,也没有在我们最近的讲座中找到幻灯片。

private void bigFunction(){
    smallFunction1();   // O(n)
    smallFunction2();   // O(n)
    smallFunction3();   // O(n)
} // Now what does this result in?

我最初的想法是O(n),但我想确定。

4 个答案:

答案 0 :(得分:3)

是的,这是正确的。进行任何常数O(n)运算的成本是O(n)。

具体地,O(n)×O(1)= O(n)。

希望这有帮助!

答案 1 :(得分:0)

3 x O(n)= O(n)因为我们试图找到时间复杂度,最大的复杂性将是答案,O(n)是该算法中最大的。

答案 2 :(得分:0)

你需要记住大哦的定义:

  

如果存在数字K和T,则函数f(x)被称为O(g(n))   (当然你可以自由选择)这样对于所有x> T,f(x)   < K * g(x)。

特别重要的是,您可以自由选择符合条件的任何 K,而不仅仅是最小的K.正是这个属性导致g(n)始终显示为没有任何常数因素:以下两个场景完全等效:

f(x) = x, g(n) = 2n, K = 1
f(x) = x, g(n) = 4n, K = 1/2

因为你可以简单地通过适当地选择K来使g具有任何常数因子,实际上我们并不打扰并始终将g视为始终没有常数因子。

此时应该清楚O(g(n))+ O(g(n))仍然是O(g(n)),因为对于总和,你可以简单地选择“加倍通常”值对于K而言仍然具有与g(n)相同的形式。因此,任何常数数量的O(n)函数的总和仍为O(n)。

答案 3 :(得分:0)

真正确定这样的事情的最好方法是根据@ Jon的答案中引用的定义构建证明:

A function f(x) is said to be O(g(n)) if there are numbers 
K and T such that for all x > T, f(x) < K * g(x).

设f_1(n)为smallFunction1()的时间,smallFunction2()的f_2(n)和smallFunction3()的f_3(n),均为n大小问题。

因为f_1(n)是O(n),所以存在K_1和T_1,使得对于所有n> 1。 T_1,f_1(n)&lt; K_1 * n。 类似地,存在K_2,T_2,K_3和T_3,使得对于所有n> 1。 T_2,f_2(n)&lt; K_2 * n并且对于所有n> T_3,f_3(n)&lt; K_3 * n。

设K等于K_1 + K_2 + K_3并且让T等于max(T_1,T_2,T_3)。那么对于所有n&gt; T,f_1(n)&lt; K_1 * n,f_2(n)&lt; K_2 * n,f_3(n)&lt; K_3 * n。

连续运行三个函数的时间f_1(n)+ f_2(n)+ f_3(n)小于K_1 * n + K_2 * n + K_3 * n =(K_1 + K_2 + K_3)* n = K * n,因此总时间为O(n)。