2016-06-22 2 views
0

더 높은 결과로 이어질 수도 있고 그렇지 않을 수도있는 조건문을 사용하여 시간 복잡성을 어떻게 계산합니까? 예를 들어조건문을 사용한 시간 복잡도

다음 경우 - 다른 조건의 내용은 무엇을

for(int i = 0; i < n; i++){ 
    //an elementary operation 
    for(int j = 0; j < n; j++){ 
     //another elementary operation 
     if (i == j){ 
      for(int k = 0; k < n; k++){ 
       //yet another elementary operation 
      } 
     } else { 
      //elementary operation 
     } 
    } 
} 

그리고 반전 있다면?

+0

스 니펫은 C, C++ 또는 Java와 유사하므로 할당 연산자를 관계형으로 대체했습니다. 네가 의미하는 바가 아니었다면 롤백해라. – Bathsheba

답변

0

코드에 O (n^2)가 필요합니다. 처음 두 루프는 O (n^2) 작업을 수행합니다. "k"루프는 O (n) 작업을 소요하고 n 번 호출됩니다. 그것은 O (n^2)를 제공합니다. 코드의 총 복잡도는 O (n^2) + O (n^2) = O (n^2)가됩니다.

또 다른 시도 :

- First 'i' loop runs n times. 
- Second 'j' loop runs n times. For each of is and js (there are n^2 combinations): 
    - if i == j make n combinations. There are n possibilities that i==j, 
     so this part of code runs O(n^2). 
    - if it's not, it makes elementary operation. There are n^2 - n combinations like that 
     so it will take O(n^2) time. 
- The above proves, that this code will take O(n) operations. 
+0

그래서 조건문은 합계 규칙으로 처리해야합니까? –

+0

복잡도를 계산하는 규칙은 하나도 없습니다. 귀하의 예제에서 'k'루프는 각 i에 대해 한 번 실행됩니다. 그래서 그것은 n 번 실행됩니다. n * n은 n^2입니다. – xenteros

+0

@JPost 내 업데이트 확인 – xenteros

-2

당신이 수행하는 분석의 종류에 따라 달라집니다. worst-case complexity을 분석하는 경우 두 분기의 최악의 복잡성을 취하십시오. average-case complexity을 분석하는 경우 하나의 분기 또는 다른 분기를 입력 할 확률을 계산하고 각 복잡성에 해당 경로를 사용할 확률을 곱해야합니다.

분기를 변경하는 경우 확률 계수를 전환하면됩니다.

+0

이 알고리즘은 결정적입니다. 그것은 항상 같은 길이로 실행됩니다. – xenteros

+0

최악의 경우 복잡성에 대해 명확히 설명해 주시겠습니까? 두 가지 최악의 복잡성을 취하는 것은 if 조건으로 인해 주어진 예제에서 작동하지 않을 것입니다. –