2014-11-10 2 views
0

다음은 간단히 구현 한 코드입니다. for 루프는 O (n)의 복잡성을 가져야합니다. 나는 내부 while 루프의 시간 복잡성을 파악할 수 없다.알고리즘 시간 복잡도 분석 (내부 while 루프가있는 루프의 경우)

int x,n;  // Inputted by the user. 
for (int i=0; i<n; i++) 
{ 
    int done=0; 
    if (Condition) 
    { 

     while (done < x) 
     { 
      done++;  // Based on a lot of operations 
     } 
    } 
} 

원하는 경우 전체 코드를 게시 할 수 있습니다. 미리 감사드립니다 :)

+1

__overall__ 내부 루프 복잡성은 O (x)입니다. 그러나'done'을 0으로 리셋하지 않기 때문에''내부 연산 '_이 실행되는'x' 번이 외부 루프 전체에서 수행됩니다. 결국이 작업은'x' 번만 실행됩니다. – Rerito

+0

@Rerito 실수를 저질 렀습니다. done은 루프 반복마다 0으로 재설정됩니다. – user3490561

+1

그런 다음 처음 시작할 때뿐만 아니라'Condition'이 트리거 될 때마다 실행됩니다. 내부 루프 복잡성은 O (x)로 유지됩니다 (연산이 메트릭으로 실행되는 횟수를 가짐). – Rerito

답변

2

여기서 복잡성은 프로그램이 내부 루프의 작업을 실행하는 횟수를 조사하여 측정됩니다.

Condition이 실행될 때마다 내부 루프는 x 번 실행됩니다. 따라서 내부 루프 복잡성은 O (x)입니다.

n 번까지 실행할 수 있습니다. 이로 인해 최악의 경우 O (x.n)의 복잡성이 제공됩니다.

Condition에 대한 추가 지식이 있으면보다 정확한 분석을 얻을 수 있습니다. 예를 들어 평균 복잡도을 계산할 수 있습니다.

예를 들어, Condition!(i & (i-1))이라고합시다. 사실i이 0 또는 2의 거듭 제곱 인 경우에만 루프가 실행됩니다.이 경우 루프는 정확하게 E(ln2(n)) + 2 번 실행됩니다 (E(.)은 정수 부분 기능 임). 결국 전체적인 복잡성 이됨을 알게 됨 O (x.ln (n))