以下代码的时间复杂度(用big-O表示法)?

以下代码的时间复杂度(用big-O表示法)?,big-o,time-complexity,Big O,Time Complexity,我只是想知道下面代码的时间复杂度是多少 我认为下面代码的时间复杂度(大O)应该是O(n^4) 你们觉得怎么样 int result = 0; for(int i =1; i<n*n; i++){ for (int j=i; j*j <n; j++){ for(int k =j; k*k <n; k++){ result++; } } } int结果=0; 对于(inti=1;i在我看来像n^(2.75): - outer loop: n^

我只是想知道下面代码的时间复杂度是多少

我认为下面代码的时间复杂度(大O)应该是O(n^4)

你们觉得怎么样

int result = 0;
for(int i =1; i<n*n; i++){
  for (int j=i; j*j <n; j++){
    for(int k =j; k*k <n; k++){
      result++;
     }
  }
}
int结果=0;
对于(inti=1;i在我看来像
n^(2.75)

- outer loop: n^2
- first inner loop is sqrt(n)
- second inner loop is sqrt(sqrt(n))
总数:

n^2 * sqrt(n) *  sqrt(sqrt(n)) = n^(2+ 0.5 + 0.25) = n^(2.75)
使用西格玛符号的正式步骤(需要验证)将产生以下结果:


一个实验怎么样。运行这个代码n=1到100,每次打印“result”。这会让你觉得O(n^4)不太可能是正确的答案。另一方面,“result”的值并不能可靠地给出时间复杂度。有两个原因是错误的:内部循环不是sqrt(sqrt(n))。如果将这两个循环替换为“for(j=i;jsqrt(n)时,j循环根本不执行;只需花费恒定的时间来检查它是否不执行。“result”将设置为O(n^1.5)。外部循环执行n^2次,这使得整个代码为O(n^2)。@gnasher729该分析可能值得作为单独的答案发布。