有人可以向我解释在这里做什么

时间:2014-08-29 18:48:31

标签: c loops nested

我不想要我想知道怎么做的答案。 算法doIt的效率可以表示为O(f(n))= n ^ 3。准确地计算以下程序段的效率并使用big-O表示法。

for (i=1; i<=n+1; i++)
    for (j=1; j<n, j++)
        doIt (...)

他给我们的例子并不是这样的,他只是在其他方块内画了几个方块,这些方块向我们展示了它是一个嵌套的循环。他没有给我们任何类型的代码,比如问题中的代码。他刚刚写了

  

Alg(m,n,k,l)= 3n ^ 3
  M = 1n,N = 1 2n,K = 1n,L = 1n ^ 2
  N ^ 2 * N * 2N * * 3N ^ 3 = 6N ^ 8 = O(N ^ 8)

所以,我假设这是一个嵌套循环,它最高的是n ^ 3。 或者有人可以为示例编写代码,以便我能更好地理解它吗?

1 个答案:

答案 0 :(得分:0)

for (i=1; i<=n+1; i++)
for (j=1; j<n, j++)
    doIt (...)

正如你所提到的,最坏情况的复杂性是O(n ^ 3)。

因此,在嵌套循环的情况下,要关注的主要事情是第一个循环引导内循环,即内循环通常不运行。迭代(不一定总是)比外循环!

在你的问题中,外部循环运行i = 1到i = n + 1 --- n+1 times。类似地,内环运行j = 1到j <1。 n --- 在外循环的每次迭代中进行n-1次迭代。 此外,函数doIt()在内部循环内部,复杂度为O(n ^ 3)。

接下来,根据最坏情况的复杂性,n + 1次迭代的次序为O(n)。

类似地,根据最坏情况的复杂性,n-1次迭代的次序为O(n)!

因此,整体最坏情况复杂度= O(n)*O(n)*O(n^3) = O(n^5) ......

如果您无法理解,请在下面发表评论!