Big O : 종속성이있는 중첩 된 For 루프


9

Big O로 숙제를 받았습니다. 이전 루프에 의존하는 중첩 for 루프가 붙어 있습니다. 다음은 숙제 질문의 변경된 버전입니다. 실제로 이해하고 싶습니다.

sum = 0;
for (i = 0; i < n; i++ 
    for (j = 0; j < i; j++) 
        sum++;

나를 버리는 j < i부분 이 그 부분입니다. 거의 계승처럼 실행되지만 추가로 보입니다. 어떤 힌트라도 정말로 감사하겠습니다.


답변:


10

몇 가지 사항을 명확히하겠습니다. big-O 표기법에 관심이 있습니다. 이는 상한을 의미 합니다. 다시 말해, 실제로하는 것보다 더 많은 단계를 계산해도됩니다. 특히, 알고리즘을 수정하여

 ...
    for (j = 0; j < n; j++) 
 ...

따라서 두 개의 중첩 루프가 있으며 각 루프는 당신에게 제공 시간, 상한영형(2)

물론 상한에 대한 적절한 추정치를 원합니다. 따라서 완료를 위해 하한을 결정하려고합니다. 이것은 적은 단계를 계산해도 괜찮습니다. 따라서 수정을 고려하십시오

for (i = n/2; i < n; i++)
    for (j = 0; j < n/2; j++) 
        sum++;

여기서는 루프 반복 중 일부만 수행합니다. 다시 두 개의 중첩 루프가 있지만 이번에는/2 루프 당 반복은 적어도 우리가 가지고 있음을 보여줍니다. 2/4추가. 이 경우에 우리는이 점근선 하한을Ω(2). 하한과 상한이 일치하기 때문에 우리는 심지어2 타이트한 점근 적 바운드이며 Θ(2).

자세한 내용은 여기를 참조하십시오 .


6
sum = 0;
for (i = 0; i < n; i++)
    for (j = 0; j < i; j++) 
        sum++;

이것을 추적합시다 :

  • i = 0이면 내부 루프가 전혀 실행되지 않습니다 ( 0<0 == false).
  • i = 1이면 내부 루프가 한 번 실행됩니다 (j == 0의 경우).
  • i = 2이면 내부 루프가 두 번 실행됩니다. (j == 0 및 j == 1의 경우).

따라서이 알고리즘은 sum다음 횟수만큼 증가 합니다.

엑스=1엑스1=0+1+2++4 ...+1=(1)2

우리는 검사를 통해 그 합이 "삼각수"임을 알 수 있습니다. 배포 나머지 분자에, 우리는 도착 22가장 빠르게 성장하는 용어는 2 따라서 Bachman-Landau Big-Theta의 복잡성은 θ(2)영형(2)  Ω(2).


3

내가 이것을 설명 할 수 있는지 보자 ...

내부 루프가 j라면

이제 첫 번째 반복에서는 내부 루프를 통해 n- (n-1) 번 수행합니다. 두 번째로 내부 루프를 통해 n- (n-2) 번 수행합니다. N 번째 시간에는 n- (nn) 번을 수행합니다. n 번입니다.

내부 루프를 통과하는 횟수를 평균하면 n / 2 배가됩니다.

그래서 이것은 O (n * n / 2) = O (n ^ 2 / 2) = O (n ^ 2)라고 말할 수 있습니다

말이 돼?


조금 이상하지만, 나는 그것을 얻는 것 같아요! 감사! haha에서 끝까지 가라 앉는 데 약간의 시간이 걸릴 수 있습니다.

따라서 해당 j < i부분이 실제로 이면 해당 부분 j < i^2의 결과 O는 n ^ 2 / 2입니까?

우선 O (n ^ 2 / 2) = O (n ^ 2)입니다. 이제 j <i ^ 2로 변경하면 첫 번째 반복에서 (n- (n-1)) ^ 2를 수행하고 마지막 반복에서 n ^ 2를 수행합니다. 내부 루프에 대한 big-O 표기법이 무엇인지 기억하지 못합니다. O (n ^ 2)는 느슨한 상한입니다. 따라서 전체에 대한 느슨한 상한은 O (n ^ 3)이지만 내부 루프는 O (n ^ 2)보다 작습니다. 말이 돼?
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.