Big o 查找If条件内For循环的大O表示法

Big o 查找If条件内For循环的大O表示法,big-o,Big O,如何找到此代码的大O符号?我不熟悉这个大o符号。因此,如果有人能简单地向我解释一下,我将不胜感激。。谢谢大家! 大O是函数的渐近上界。因此,在您的例子中,如果if条件的计算结果始终为true,那么for循环占用的时间最多,因此您可以假设这是一个正确的上界,这可能并不严格。但是,在很多情况下,你不能做得比这更好 在某些情况下,您可以尝试删除if,同时大致保持操作数。例如,在你的例子中,你可以用j=i替换j=1,用j+=i替换++j。这并不是为了改变算法,而是为了复杂性分析而改变你看待它的方式。您仍

如何找到此代码的大O符号?我不熟悉这个大o符号。因此,如果有人能简单地向我解释一下,我将不胜感激。。谢谢大家!

大O是函数的渐近上界。因此,在您的例子中,如果if条件的计算结果始终为true,那么for循环占用的时间最多,因此您可以假设这是一个正确的上界,这可能并不严格。但是,在很多情况下,你不能做得比这更好

在某些情况下,您可以尝试删除if,同时大致保持操作数。例如,在你的例子中,你可以用j=i替换j=1,用j+=i替换++j。这并不是为了改变算法,而是为了复杂性分析而改变你看待它的方式。您仍然必须记住,中间for循环需要i*i步。现在你有了这个:

sum = 0;
for( i = 1; i < n; ++i )
  for( j = 1; j < i * i; ++j )
    if( j % i == 0 )
      for( k = 0; k < j; ++k )
        ++sum;
您还可以假设if条件始终为false。这样你就得到了一个下限。在某些情况下,上限和下限是匹配的,这意味着您难以分析的部分实际上与总体复杂性无关

sum = 0;
for( i = 1; i < n; ++i )
  O(i * i) Operations
  for( j = i; j < i * i; j += i )
    for( k = 0; k < j; ++k )
      ++sum;