Złożoność czasowa potrójnie zagnieżdżonej pętli


13

Proszę wziąć pod uwagę następującą potrójnie zagnieżdżoną pętlę:

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

Instrukcja tutaj wykonywana jest dokładnie razy. Czy ktoś mógłby wyjaśnić, w jaki sposób uzyskano ten wzór? Dziękuję Ci.n(n+1)(n+2)6


1
Kwestia czasu formuła złożoność zagnieżdżonych pętli może być również interesujące.
Juho

Odpowiedzi:


14

Możesz policzyć, ile razy wykonywana jest najbardziej wewnętrzna pętla, licząc liczbę trojaków dla których jest wykonywana.(i,j,k)

1ijkn

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

n+2(n+23)


2
Niezła odpowiedź! Dokładne wartości i, j, k nie są ważne. Musimy tylko wiedzieć, że dowolne niebieskie pole można umieścić w n możliwych pozycjach i że ich pozycje są ograniczone: 2. miejsce następuje zawsze po 1. i przed 3..
Dávid Natingga

+2n+2n+3

1
n+3n+2i1

3

ni

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

j=0ninijn

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

Wyzwanie dla Ciebie: Wyobraź sobie, że masz pętlę zagnieżdżoną w kształcie litery X. Zgodnie z poprzednią odpowiedzią wykonałby (n + x-1) wybór x razy. Jak obliczysz swoją formułę?
Dávid Natingga

na szczęście OP nie poprosił o x-nested! W jaki sposób druga podana odpowiedź rozwija się do pętli zagnieżdżonej? Moja odpowiedź powinna uzyskać więcej sum od 0 do n, 0 do n-i_1, 0 do n-i_2, ..., 0 do n-i_x. Ale nie wiedziałbym, jak to obliczyć.
andy mcevoy,

1
Odpowiedź nie rozwija się wyraźnie dla ogólnego x, ale przedstawiony proces wnioskowania jest łatwy do naśladowania dla pętli zagnieżdżonych w x. Po prostu dodajesz więcej niebieskich pól. Nie wiem też, jak obliczyć te więcej kwot.
Dávid Natingga
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.