我写了一个代码如下:
for( i = 0 ; i < n; i++){
for( j = 0; j < m + i; j++){
for( k = 0; k < m + i; k++){
dosomething();
}
}
}
所以平均时间复杂度为O(n *(m + n / 2)*(m + n / 2))?什么是最糟糕的大O呢?我很困惑。
答案 0 :(得分:2)
您的算法在最坏情况,最佳情况和平均情况下的复杂性都是相同的。
对于每个大小(n,m)的输入,它总是执行相同数量的指令。
n,m
执行的最大步骤数。这是O(n*(n+m)^2)
,通过显示中间和内部循环比从n+m/2
到n+m
花费更多时间,并且因为它在O(n*(n+m)^2)
中,可以很容易地证明这一点,然后是算法。n,m
采取相同数量的步骤。n,m
输入的操作次数 - 但确切的输入在此处无关紧要,只有n
和m
的大小 - 所以这将保持不变答案 1 :(得分:0)
有条不紊地使用Sigma表示法会给你以下内容: