Complessità temporale di un ciclo triplo nidificato


13

Si prega di considerare il seguente ciclo triplo nidificato:

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

L'istruzione qui viene eseguita esattamente volte. Qualcuno potrebbe spiegare come è stata ottenuta questa formula? Grazie.n(n+1)(n+2)6


1
La domanda ora la complessità formula di cicli annidati potrebbe anche essere di interesse.
Juho,

Risposte:


14

È possibile contare il numero di volte in cui il ciclo più interno viene eseguito contando il numero di terzine per le quali viene eseguito.(i,j,k)

Dalle condizioni del circuito sappiamo che: . Possiamo ridurlo al seguente semplice problema combinatorio.1ijkn

  • Immagina scatole di colore rosso posizionate in una matrice da sinistra a destra.n+2
  • Scegli 3 caselle dalle caselle e dipingile di blu.n+2
  • Formare una tripletta come segue: (i,j,k)
    • = 1 + numero di caselle colorate rosse a sinistra della prima casella blu.i
    • = 1 + numero di caselle colorate rosse a sinistra della seconda casella blu.j
    • = 1 + numero di caselle colorate rosse a sinistra della terza casella blu.k

Quindi, dobbiamo solo contare il numero di modi per scegliere 3 scatole da scatole che è ( n + 2n+2 .(n+23)


2
Bella risposta! I valori esatti di i, j, k non sono importanti. Dobbiamo solo sapere che qualsiasi casella blu può essere posizionata in n possibili posizioni e che le loro posizioni sono limitate: la seconda arriva sempre dopo la prima e prima della terza.
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

Una sfida per te: immagina di avere un ciclo nidificato. Secondo la risposta precedente avrebbe eseguito (n + x-1) scegliere x volte. Come calcoleresti la tua formula?
Dávid Natingga,

per fortuna l'OP non ha richiesto x-nested! In che modo l'altra risposta fornita si espande in un ciclo nidificato? La mia risposta dovrebbe ottenere solo più somme che vanno da 0 a n, da 0 a n-i_1, da 0 a n-i_2, ..., da 0 a n-i_x. Ma non saprei come calcolarlo.
Andy Mcevoy,

1
La risposta non si espande esplicitamente per una x generale, ma il processo di ragionamento presentato è facile da seguire per i cicli nidificati. Aggiungi solo più caselle blu. Né so come avrei calcolato quelle somme in più.
Dávid Natingga,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.