Algorithm O循环的表示法 for(int i=0;i
这里的func是Algorithm O循环的表示法 for(int i=0;i,algorithm,performance,notation,Algorithm,Performance,Notation,这里的func是n*(n+1)/2,但是如果外部循环条件是i
n*(n+1)/2
,但是如果外部循环条件是i
?我对相互关联的循环有问题。您只需计算迭代的总数:
for(int i = 0; i < n; i++) {
for(int j = 0; j < i; j++) {
O(1);
}
}
正如你正确推断的那样。当您将
n
替换为log(n)
时,只需在最后的公式中执行相同的操作,然后变成log(n)*(log(n)+1)/2
,或者如果外部循环的条件更改为iO((log(n))^2)
然后嵌套的两个循环构造的总体复杂性从O(n2)变为O(log(n)2)
您可以通过一个简单的替换
k=log(n)
来显示这一点,因为循环在k
方面的复杂性是O(k2)。反转替换产生O(log(n)2)。对于嵌套For循环(使用O表示法时,ofc),可以将所有循环的最坏情况相乘。如果第一个循环指向x,而一个嵌套循环指向i(i是最坏情况下的x),那么运行时复杂性为O(x^2)如果用其他东西替换n
,只需用相同的东西替换n*(n+1)/2
中的每个n
。这似乎归结为缺乏对基础代数的理解(或暂时的思维失误)。1+2+3+…+n=n*(n+1)/2
,而不是1+2+3+..+n-1
@AnthonyLabarre当然,这是一个非常愚蠢的错误。Tnx。
1 + 2 + 3 + .. + n - 1 = n * (n - 1) / 2