两种算法一起运行的时间复杂度?

时间:2019-06-11 13:19:33

标签: time-complexity big-o

想像一下T 1 (n)和T 2 (n)是P 1 和P 2 程序和

T 1 (n)∈O(f(n))

T 2 (n)∈O(g(n))

当P 1 沿着P <侧运行时,T 1 (n)+ T 2 (n)的数量是多少? sub> 2 ?

答案是O(max{f(n), g(n)}),为什么?

2 个答案:

答案 0 :(得分:2)

当我们考虑Big-O表示法时,通常会考虑算法在输入n的大小变得很大时的作用。很多时候,我们可以依靠数学直觉。考虑两个函数,一个是O(n^2),另一个是O(n)。随着n的变大,两种算法都无限制地增加。区别在于O(n^2)算法的增长速度比O(n)快得多。事实上,实际上,如果您将算法组合成O(n^2+n),那么n本身的因数非常小,可以忽略不计,并且该算法仍在类中O(n^2)

这就是为什么将两种算法加在一起时,合并的运行时间在O(max{f(n), g(n)})中。总是有一个“主导”运行时的系统,而使另一个系统的影响可以忽略不计。

答案 1 :(得分:1)

  

答案是O(max {f(n),g(n)})

仅当程序彼此独立运行时,这才是正确的。无论如何,让我们假设是这种情况。

为了回答为什么,我们需要仔细研究 BIG-O-notation 的含义。与您所说的相反,它不代表时间,而是复杂度的上限

因此,虽然同时运行两个程序可能会花费更多时间,但复杂性的上限不会增加。

请考虑一个示例:P_1计算向量中所有n对数字的乘积,它是使用嵌套循环实现的,因此复杂度为O(n*n)。 P_2仅在一个循环中打印数字,因此复杂度为O(n)

现在,如果我们同时运行两个程序,则P_1的嵌套循环是最'complex'部分,使组合的复杂度为O(n*n)