3 중 중첩 루프의 시간 복잡성


13

다음 3 중 루프 루프를 고려하십시오.

for (int i = 1; i <= n; ++i)
    for (int j = i; j <= n; ++j)
        for (int k = j; k <= n; ++k)
            // statement

이 문장은 정확히 번 누군가이 공식을 어떻게 얻었는지 설명해 주시겠습니까? 감사합니다.n(n+1)(n+2)6


1
질문 중첩 루프의 시간 복잡도 공식은 또한 관심이있을 수 있습니다.
Juho

답변:


14

실행되는 트리플릿 수 를 계산하여 가장 안쪽 for 루프가 실행 된 횟수를 계산할 수 있습니다.(i,j,k)

1ijkn

  • n+2
  • n+2
  • (i,j,k)
    • i
    • j
    • k

n+2(n+23)


2
좋은 대답입니다! i, j, k의 정확한 값은 중요하지 않습니다. 우리는 단지 파란색 상자를 n 개의 가능한 위치에 배치 할 수 있고 그 위치가 제한되어 있음을 알아야합니다.
Dávid Natingga

@rizwanhudda 의 부분을 제외하고는 지 웁니다 . 설명해 주시겠습니까? 은 올바른 숫자처럼 보입니다. +2n+2n+3
saadtaame

1
@saadtaame 예. 빨간 상자 가 있다고 상상할 수 있지만 " 빨간 상자" 중에서 파란색으로 칠하기 위해 3 개의 빨간 상자를 자유롭게 선택할 수 있습니다. 첫 번째 상자를 파란색으로 표시 할 수 없기 때문에 ( )n+3n+2i1
rizwanhudda

3

나를 위해 내부 루프가 번 실행되고 내부 루프 의 총 실행 횟수는 다음과 같습니다.ni

(ni)+(ni1)+(ni2)++1

이것은 로 다시 쓸 수 있으며 번 실행 되므로 총 실행 횟수는 다음과 같습니다.j=0ninijn

i=0nj=0ninij=n(n+1)(n+2)6

도전 과제 : x-nested 루프가 있다고 상상해보십시오. 이전 답변에 따르면 (n + x-1) x 번 선택합니다. 수식을 어떻게 계산 하시겠습니까?
다비드 나 팅가

운 좋게도 OP는 x-nested를 요구하지 않았습니다! 주어진 다른 대답은 어떻게 x 중첩 루프로 확장됩니까? 내 대답은 0에서 n, 0에서 n-i_1, 0에서 n-i_2, ..., 0에서 n-i_x까지 더 많은 합계를 가져와야합니다. 그러나 나는 그것을 계산하는 방법을 모른다.
andy mcevoy 7:25에

1
대답은 일반적인 x에 대해서는 명시 적으로 확장되지 않지만 제시된 추론 프로세스는 x-nested 루프를 따르기 쉽습니다. 파란색 상자 만 더 추가하면됩니다. 더 많은 합계를 계산하는 방법을 알지 못합니다.
Dávid Natingga
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.