这个问题是为了修改过去的试卷 只是想知道我做得对吗
根据给定整数n的运算次数计算出下面一段代码的时间复杂度T(n):
for ( int i = 1; i < n*n*n; i *= n ) {
for ( int j = 0; j < n; j += 2 ) {
for ( int k = 1; k < n; k *= 3 ) {
// constant number C of elementary operations
}
}
}
到目前为止,我已经提出了n ^ 3 * n * log n = O(n ^ 4 log n)
答案 0 :(得分:1)
我会去的。
第一个循环是 O(1)常量,因为它总是运行3次迭代(1*n*n*n == n*n*n
)。
for ( int i = 1; i < n*n*n; i *= n )
第二个循环是 O(0.5n)= O(n)。
for ( int j = 0; j < n; j += 2 )
第三个循环是 O(log n)。
for ( int k = 1; k < n; k *= 3 )
因此算法的时间复杂度为 O(n log n)。
答案 1 :(得分:0)
我认为你错过了关键点。我没有在问题的任何地方看到它要求你解决Big-Oh方面的复杂性。相反,它要求给定整数n的操作数。
这是我的解决方案,
对于给定的n,内部循环变量连续采用以下内容 值:k = 1,3 ^ 0,3,3 ^ 2 ,. 。 。 ,3 ^(m-1)
因此,内部循环对每对值执行C log3n操作 变量j和i。
中间循环变量j取n = 2个值,
对于给定的n,外循环变量i取三个值,1,n和n ^ 2.
因此整段代码的时间复杂度等于T(n)= 3C(n / 2)log3n = 1.5Cnlog3n。
您可能需要查看此内容,但这是我对您的问题的解释。