Voglio calcolare il runtime della seguente funzione
T (n) = (1 + 2 + 3 + 4 + 5 + ... + n) / n
All'inizio questo non mi è sembrato difficile perché può essere risolto facilmente trasformando la formula
T (n) = (n (n-1) / 2) / n = (n ^ 2-n) / n = n-1 che porta in O (n).
Pensando a questa funzione ho faticato. Non sono sicuro di poter ridurre n, perché non conosco il codice dietro quella funzione.
Ad esempio potrebbe essere qualcosa di simile
method foo()
{
methodWhichTakesNCubeAmountOfTime(); //Build sum, O(n^2)
methodWhichTakesNAmountOfTimeAndCantBeSimplified(); //O(n)
}
Per questo metodo otterrei n cubi come runtime.
O(n^2) + O(n) = O(n^2)
So che questo metodo non copre il termine originale ma spero che tu capisca cosa intendo: Il diviso per n potrebbe essere una funzione completamente diversa (che ha accidentalmente una complessità di n) e quindi non posso ridurre il altri n con esso.
Quindi sono confuso. Sono autorizzato a trasformare i termini normalmente durante il calcolo del Big O o alcune regole matematiche non si applicano qui?
Grazie.