Sto cercando di capire la complessità di un ciclo for utilizzando la notazione Big O. L'ho già fatto nelle altre classi, ma questa è più rigorosa delle altre perché è sull'algoritmo attuale. Il codice è il seguente:Complessità di un ciclo double per
for(cnt = 0, i=1; i<=n; i++) //for any size n
{
for(j = 1; j <= i; j++)
{
cnt++;
}
}
E
for(cnt = 0, i=1; i<=n; i*=2) //for any size n
{
for(j = 1; j <= i; j++)
{
cnt++;
}
}
sono arrivato che il primo ciclo è di O (n) la complessità perché sta attraversando la lista n volte. Per quanto riguarda il secondo ciclo sono un po 'perso. Credo che stia attraversando il ciclo i volte per ogni n che viene testato. Ho assunto (erroneamente) che ciò significa che il ciclo è O (n * i) per ogni volta che viene valutato. C'è qualcosa che mi manca nella mia ipotesi. So che cnt ++ è un tempo costante.
Grazie per l'aiuto nell'analisi. Ogni loop è nel suo spazio, non sono insieme.
Il primo campione non è in O (n), hai provato a stampare cnt dopo i cicli utilizzando valori diversi per n? – Kwariz
@Kwariz mi scuso. Intendevo dire che il primo ciclo più esterno nel primo esempio è O (n). Non l'intera collezione di double for loops nel primo esempio. –