답변:
몇 가지 사항을 명확히하겠습니다. big-O 표기법에 관심이 있습니다. 이는 상한을 의미 합니다. 다시 말해, 실제로하는 것보다 더 많은 단계를 계산해도됩니다. 특히, 알고리즘을 수정하여
...
for (j = 0; j < n; j++)
...
따라서 두 개의 중첩 루프가 있으며 각 루프는 당신에게 제공 시간, 상한 의
물론 상한에 대한 적절한 추정치를 원합니다. 따라서 완료를 위해 하한을 결정하려고합니다. 이것은 적은 단계를 계산해도 괜찮습니다. 따라서 수정을 고려하십시오
for (i = n/2; i < n; i++)
for (j = 0; j < n/2; j++)
sum++;
여기서는 루프 반복 중 일부만 수행합니다. 다시 두 개의 중첩 루프가 있지만 이번에는 루프 당 반복은 적어도 우리가 가지고 있음을 보여줍니다. 추가. 이 경우에 우리는이 점근선 하한을. 하한과 상한이 일치하기 때문에 우리는 심지어 타이트한 점근 적 바운드이며 .
자세한 내용은 여기를 참조하십시오 .
sum = 0;
for (i = 0; i < n; i++)
for (j = 0; j < i; j++)
sum++;
이것을 추적합시다 :
0<0 == false
).따라서이 알고리즘은 sum
다음 횟수만큼 증가 합니다.
우리는 검사를 통해 그 합이 "삼각수"임을 알 수 있습니다. 배포 나머지 분자에, 우리는 도착 가장 빠르게 성장하는 용어는 따라서 Bachman-Landau Big-Theta의 복잡성은 .
내가 이것을 설명 할 수 있는지 보자 ...
내부 루프가 j라면
이제 첫 번째 반복에서는 내부 루프를 통해 n- (n-1) 번 수행합니다. 두 번째로 내부 루프를 통해 n- (n-2) 번 수행합니다. N 번째 시간에는 n- (nn) 번을 수행합니다. n 번입니다.
내부 루프를 통과하는 횟수를 평균하면 n / 2 배가됩니다.
그래서 이것은 O (n * n / 2) = O (n ^ 2 / 2) = O (n ^ 2)라고 말할 수 있습니다
말이 돼?