2013-03-28 3 views
2

이 예에서는 두 개의 for 루프가 있습니다. 실행 시간은 O (num1 + num2)입니까?두 개의 for for 루프와 두 개의 for for for 루프의 실행 시간은 얼마나됩니까?

for(int i=0; i< num1 ; i++)  
{ 
    print i; 
} 

for(int i=0 ; i<num2 ; i++) 
{ 
    print i; 
} 

그리고이 예제에서는 중첩 된 for 루프가 있습니다. 0에서 num1까지의 각 숫자에 대해 0에서 num2까지 반복해야하기 때문에 실행 시간은 O (num1 * num2)입니까?

for(int i=0 ; i<num1 ; i++) 
{ 
    for(int j=0 ; j<num2 ; j++) 
    { 
     print i; 
    } 
} 
+0

큰 O를 걱정하지 말고, 먼저 'num1, num2'에 대한 몇 가지 값에 대해 각 스 니펫별로 인쇄 할 숫자의 수를 계산하지 않으시겠습니까? 그것은 당신에게 약간의 직감을 줄 것입니다. – delnan

+0

첫 번째 예는 O (n)이고 두 번째 예는 O (n^2)입니다. Big-O 표기법은 입력의 크기에 따라 런타임이 증가하는 방법을 나타냅니다. 실제 숫자는 넣지 마십시오. – Blorgbeard

+0

첫 번째 경우는 Num1 + Num2 Big-O = O (n)이고 두 번째 경우 Num1 * Num2 Big- O = O (N^2) – dekdev

답변

2

더 일반적 일 수 있습니다. Big-O 표기법은 실제 매개 변수를 사용하여 정확한 값을 찾는 것이 아닙니다. 점근 적 런타임을 결정하는 것입니다. 이 경우 num1과 num2를 n으로 바꿀 수 있습니다. 여기서 n은 0에서 시작하는 간격의 상한입니다.이 방법을 사용하면 첫 번째 예제의 런타임이 O (n)이고 두 번째 예제는 런타임 O (n^2)를 갖습니다. 첫 번째 예는 선형 시간으로 실행되고 두 번째 예는 2 차 예입니다. 알고리즘 런타임을 범주화하기 위해 이보다 더 자세히 설명 할 필요는 거의 없습니다.

+1

아래쪽 투표를 설명하고 답을 개선하십시오. – kronion

+1

그래서 for (int i = 0; i user1477388

+2

계수에 대해 정확하지만 Big-O 표기법에는 해당 수준이 포함되어 있지 않습니다. 런타임의 순서 만 전달합니다. http://stackoverflow.com/questions/2081846/big-o-notation-question을 참조하십시오. – kronion