선생님은 자신의 평균 복잡성 알아 나에게 아래의 코드를했다 : 나는 코드가 n*(n+1)/2
번 실행하는 발견 루프를 unrowling하여평균 복잡성은
int function(int a[], int n)
{
int k=0;
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
k=k+((a[i]*a[i]+a[j]*a[j])%5==0)
return k;
}
void main()
{
int vector={0,1,2,3,4,5,6,7,8,9}
int a=function(vector, 10);
printf("%d\n", a);
}
을 나는 최악의 경우가 결론 O(n^2)
에 대한 n*(n+1)/2 < c*n^2
이 존재합니다. 평균 복잡도의 정의가 매우 비슷하지만 계산하기가 어렵다는 것을 알고 있습니다.이 경우 복잡도가 무엇인지, 이러한 유형을 계산하기위한 표준화 된 방법이 있는지 알고 싶습니다. 문제
(예 : 반복자 사이에 종속성이있는 중첩 루프).
이 코드는 항상 동일한 양의 작업을 수행하므로 평균 사례, 최상의 사례 및 최악 사례가 동일해야합니다. – templatetypedef
@templatetypedef 그건 내 추측이었다.하지만 선생님에게는 더 높은 대답이 필요하다. – Marga
나는 당신이 "더 고가"라고 말하는 것이 무엇인지 이해하지 못하지만, 단지 런타임이 길이에 달려 있다고 말하면 충분하지 않다. – templatetypedef