No, O(log n) + O(log n)
non è O(n)
. È ancora O(log n)
. Quando abbiamo una formula O grande moltiplicata per una costante, equivale al valore senza la costante moltiplicata . Quindi:
O(k * g) = O(g)
dove k
è un fattore costante, diverso da zero e g
è una funzione di delimitazione.
Un'operazione O(log n)
è un'operazione che richiede un numero di passi proporzionale al logaritmo (spesso base-2, ma non sempre e non è necessario che sia) della dimensione dell'input, denotata da n
. Quando hai più operazioni dello stesso ordine big-O, puoi aggiungerle come hai fatto, e uscire con qualcosa come O(2 * log n)
, ma la notazione O grande non riguarda i fattori moltiplicativi costanti, quindi ignoriamo il 2 e scrivi O(log n)
.
Il motivo per cui non ci occupiamo di fattori costanti * è che stiamo esaminando il potenziale di crescita di un algoritmo in base alla dimensione dell'input. Non lo usiamo per calcolare il numero esatto di passaggi, solo per vedere come potrebbe aumentare il numero di passaggi.
Diamo un'occhiata ad alcuni numeri reali per darci un esempio matematicamente meno astratto. Abbiamo un algoritmo eseguito in O(log n)
time e richiede esattamente log 2 (n) passi. Abbiamo un metodo in cui viene eseguito una volta con un input della dimensione 8. Sono necessari 3 passaggi. Abbiamo un altro metodo in cui viene eseguito due volte, quindi sono necessari 6 passaggi. Questo non è il paragone che ci interessa, però. Vogliamo sapere della crescita . Eseguiamo di nuovo il primo metodo con una dimensione di input di 16. Sono necessari 4 passaggi per completare, + 33% di passaggi in più. Eseguiamo il secondo metodo con una dimensione di input di 16. Sono necessari 8 passaggi per completare, anche + 33% di passaggi in più . Possiamo vedere che, sebbene il numero di passaggi sia diverso, la crescita è la stessa tra le funzioni. Il tasso di crescita è O(log n)
nonostante il numero di volte in cui è chiamato, ed è il tasso di crescita a cui siamo interessati.
* Non ci interessano anche le parti con funzioni di delimitazione della crescita inferiore, quindi O(n + log n)
equivale a O(n)
.