for(int i = 0; i < n; i++) {
for(int j = 0; j < i; j++) {
O(1);
}
}
这里的函数是n * (n+1) / 2
但是如果外环条件是i < log(n)
怎么办?我遇到了相互关联的循环问题。
答案 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)