O循环的表示法

时间:2017-06-21 14:47:03

标签: algorithm performance notation

for(int i = 0; i < n; i++) {
   for(int j = 0; j < i; j++) { 
      O(1);
   }
}

这里的函数是n * (n+1) / 2但是如果外环条件是i < log(n)怎么办?我遇到了相互关联的循环问题。

3 个答案:

答案 0 :(得分:3)

您只需要计算迭代总数:

1 + 2 + 3 + .. + n - 1 = n * (n - 1) / 2

正如您所推断的那样。当您将n替换为log(n)时,只需在最终公式中执行相同操作,然后将其变为log(n) * (log(n)+1) / 2,或使用Big-O表示法O((log(n))^2)

答案 1 :(得分:2)

如果外部循环的条件变为i < log(n),则嵌套双循环结构的整体复杂性从O(n 2 )变为O(log(n) 2

您可以使用简单替换k = log(n)来显示此内容,因为k方面的循环复杂度为O(k 2 )。反转取代产生O(log(n) 2 )。

答案 2 :(得分:0)

对于嵌套for循环(当使用O表示法时,ofc),您可以将所有这些循环的最坏情况场景相乘。如果第一个循环转到x并且你有一个嵌套循环转到i(我在最坏情况下为x),那么你的运行时复杂度为O(x ^ 2)