O(nk)和O(n + k)在时间复杂度上有什么区别?

时间:2014-12-04 18:28:03

标签: algorithm time complexity-theory

在算法分析中时间复杂度的大O表示法中,当算法依赖于n和k时,这两个符号之间有什么区别。 如果有一个嵌套循环,外循环运行n次,内循环运行k次,请帮助使用符号吗?

5 个答案:

答案 0 :(得分:17)

O(NK):

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

O(N + K):

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

for( j=0; j<k; j++ )
{}

答案 1 :(得分:1)

O(n + k)表示 n k 中较大者的线性增长率。假设 n 更大。然后

n + k <= n + n = 2n = O(n)

如果 n 较小,那么

n + k <= k + k = 2k = O(k).

n 是否更大,总是如此

n + k = O(n+k)

因此这种符号有助于隐藏这种不确定性。这种双变量符号对于图算法很有用,使用 n 表示顶点数, m 表示边数。您可以编写一个表达式O(n + m)来表示该算法对于稀疏图(m = Theta(n))是O(n),但对于更密集的图(例如,O(n ^ 2)则更慢。 m = Theta(n ^ 2))。

对于第二个问题,它只是简单的算术。在外循环的第一次迭代中迭代内循环k次,对于第二次循环迭代k次等,总共k + k + ... + k = n * k个总操作,即O(nk)。

答案 2 :(得分:0)

O(nk)表示所需的时间与n * k成正比。 O(n + k)表示所需的时间与n + k成正比。这正是它的样子。在你的问题中,你需要更具体地了解你不理解的内容。

在您的情况下,算法的运行时为O(nk),因为内部循环总共运行n * k次。

答案 3 :(得分:-1)

应该清楚,这些是不同的,因为,例如,如果n = k:

O(NK)= O(NN)= O(N ^ 2)

O(N + K)= O(2N)= O(n)的

答案 4 :(得分:-1)

假设函数 f(n) O(g(n))意味着存在一些常数q,使得对于 n <的所有值/ em>不小于1, f(n)不会大于 qg(n)

相反,说函数 f(x,y) O(g(x,y))意味着存在一些常数q,使得对于所有值 x y 不小于1, f(x,y)不大于 qg(x, y)的

如果 k 是一个常量,那么上面的两个值都等于 O(n),因为 k 的任何值,以及任何 n 不小于1,如果设置 q 等于(k + 1),那么 nk nor n + k 将超过 qn [即(k + 1)n ] n 的任何值不小于1。

如果 k n 都是完全独立的变量,则O(nk)是不可约的; O(n + k)将为O(max(n,k)),因为如果设置 q 等于2,则q(max(n,k))[即对于 n k 的所有值,2max(n,k)]将大于或等于n + k,且不小于1。