Questo deriva dalla scrittura di un programma in find the median of two sorted arrays con dimensioni m
e n
rispettivamente, con la complessità temporale di O(log(m + n))
.Notazione Big-O con due variabili
Posso elaborare una soluzione di O(log(m) + log(n))
. Soddisfa i requisiti di tempo sopra indicati?
penso che sia positivo perché:
log(m) + log(n) = log(m*n) <= log((m+n)^2) = 2*log(m+n) = O(log(m+n))
In altre parole, esistono k = 2
e m0 = n0 = 1
. Per qualsiasi m > m0 and n > n0
, c'è log(m*n) <= k*log(m + n)
.
C'è un difetto o sono corretto?
Più generalmente, data costante a
, possiamo dire log(n^a) = O(log(n))
con lo stesso ragionamento?
Grazie alla risposta di David. Questo è anche menzionato da Big-O notation su Wikipedia:
"We may ignore any powers of n inside of the logarithms. The set O(log n) is exactly the same as O(log(n^c))."
Quindi dici O (log (n^a)) = O (log (n))? Mi dispiace, non riesco davvero a capire la domanda. –
@GiorgiNakeuri Sì, supponendo che la notazione O grande tratti * a *> 0 come costante, quelli sono in effetti la stessa classe di funzione. –
Oh scusa :) Sto guardando questo e vedo qualcosa come O (n^a) = O (n). Dovrebbe dormire un po '. Naturalmente con log è vero. –