2015-10-02 8 views
8

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))."

risposta

6

Sì, siete sulla strada giusta su tutti i fronti. Il registro cresce abbastanza lentamente che la classe asintotica non è molto sensibile alla funzione interna.

+0

Quindi dici O (log (n^a)) = O (log (n))? Mi dispiace, non riesco davvero a capire la domanda. –

+1

@GiorgiNakeuri Sì, supponendo che la notazione O grande tratti * a *> 0 come costante, quelli sono in effetti la stessa classe di funzione. –

+1

Oh scusa :) Sto guardando questo e vedo qualcosa come O (n^a) = O (n). Dovrebbe dormire un po '. Naturalmente con log è vero. –