2015-10-02 3 views
8

Dies stammt von Schreiben eines Programms zu find the median of two sorted arrays mit der Größe m bzw. n, mit der Komplexität der Zeit von O(log(m + n)).Big-O-Notation mit zwei Variablen

Ich kann eine Lösung von O(log(m) + log(n)) erarbeiten. Erfüllt es die obige Zeitanforderung?

Ich denke, es positiv ist, weil:

log(m) + log(n) = log(m*n) <= log((m+n)^2) = 2*log(m+n) = O(log(m+n))

anders ausgedrückt, gibt es k = 2 und m0 = n0 = 1. Für jede m > m0 and n > n0 gibt es log(m*n) <= k*log(m + n).

Gibt es einen Fehler, oder bin ich richtig?

Allgemeiner ausgedrückt, können a, können wir log(n^a) = O(log(n)) mit der gleichen Argumentation sagen?


Dank Davids Antwort. Dies wird auch durch Big-O notation auf Wikipedia erwähnt:

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

Antwort

6

Ja, Sie in jeder Hinsicht korrekt sind. Log wächst langsam genug, dass die asymptotische Klasse nicht sehr empfindlich auf die interne Funktion reagiert.

+0

Sie sagen also O (log (n^a)) = O (log (n))? Entschuldigung, ich kann die Frage nicht wirklich verstehen. –

+1

@GiorgiNakeuri Ja, vorausgesetzt, dass die Groß-O-Notation * a *> 0 als Konstante behandelt, sind dies in der Tat die gleichen Funktionsklassen. –

+1

Oh Entschuldigung :) Ich schaue darauf und sehe etwas wie O (n^a) = O (n). Sollte ein wenig schlafen. Natürlich ist es bei Log wahr. –