La finale di My Computer Science II è domani, e ho bisogno di aiuto per capire come trovare il Big-Oh per segmenti di codice. Ho cercato su internet e non sono riuscito a trovare alcun esempio di come ho bisogno di capirlo.Ho bisogno di aiuto per capire come trovare il Big-Oh di un segmento di codice
Ecco un problema dal nostro campione finale:
for(int pass = 1; i <= n; pass++)
{
for(int index = 0; index < n; index++)
for(int count = 1; count < n; count++)
{
//O(1) things here.
}
}
}
Siamo tenuti a trovare l'ordine (Big-Oh) dell'algoritmo.
Io penso che sarebbe O (n^3), ed ecco come sono arrivato a questa conclusione
for(int pass = 1; i <= n; pass++) // Evaluates n times
{
for(int index = 0; index < n; index++) // Evaluates n * (n+1) times
for(int count = 1; count < n; count++) // Evaluates n * n * (n) times
{
//O(1) things here.
}
}
}
// T(n) = (n) + (n^2 + n) + n^3
// T(n) = n^3 + n^2 + 2n
// T(n) <= c*f(x)
// n^3 + n^2 + 2n <= c * (n^3)
// O(n) = n^3
Non sono solo sicuro se sto facendo in modo corretto. Qualcuno può spiegare come valutare un codice come questo e/o confermare la mia risposta?
La tua risposta è corretta, ma il numero di iterazioni che contate per ogni ciclo non lo è. Il primo e il secondo ripetono entrambe le volte e il numero ird esegue iterate 'n - 1' volte. Ovviamente questo non influisce sul risultato. –
Le cose vanno piuttosto male se devi usare un algoritmo O (n^3) per risolvere un problema del mondo reale. – john
@john: Inoltre dipende da molte situazioni e dalla quantità di 'n' :-) – deepmax