我不想要我想知道怎么做的答案。
算法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。 或者有人可以为示例编写代码,以便我能更好地理解它吗?
答案 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)
......
如果您无法理解,请在下面发表评论!