Um die Diskussion in den Kommentaren zu erläutern, ist es wichtig, womit Sie das Wachstum messen.
Wie von @Kaveh erwähnt, ist nicht in beiden gleichzeitig linear, sondern ist linear, wenn eine Konstante ist und die andere wächst.O(mn)
Andererseits würde wahrscheinlich als linear angesehen. Intuitiv, wenn verdoppelt, oder wenn verdoppelt oder sogar , wenn sowohl und doppelt, kann nicht mehr als verdoppeln. Dies gilt nicht für ; Wenn und beide Doppel- um 4 steigen, wird diese Laufzeit in vielen Zusammenhängen als quadratisch angesehen. Ich gebe ein Beispiel mit String Matching in ein paar Absätzen.m n m n m + n m n m n m nO(m+n)mnmnm+nmnmnmn
Wenn Sie jedoch die Big- Notation verwenden, verwenden Sie sie in der Regel in Bezug auf eine bestimmte Sache. Da wir meistens Theoretiker sind, ist es im Allgemeinen die Größe des Inputs für das Problem.O
Nehmen wir zum Beispiel Matrix Addition. Das Addieren von zwei Matrizen benötigt Zeit. Da jedoch jedes Element unserer Eingabe nur einmal berührt wird, wird dies normalerweise als linear bezeichnet. Mit anderen Worten, unsere Eingabe hat die Größe , sodass eine Laufzeit von in der Größe der Eingabe linear ist.O ( m nm×nO ( m n ) O ( m n )O(mn)O(mn)O(mn)
Betrachten wir nun die Zeichenfolgenübereinstimmung: Wir erhalten eine Zeichenfolge der Größe und eine Zeichenfolge der Größe und möchten feststellen, ob die kleinere Zeichenfolge in der größeren Zeichenfolge vorkommt. Wir können dies naiv in Zeit überprüfen ; Dies würde im Allgemeinen als quadratisch angesehen. Warum? Wenn und irgendetwas sein können, setze . Dann ist unsere Laufzeit und unsere Eingabe hat die Größe .n O ( m n ) m n m =mnO(mn)mnO ( m 2 ) 2 mm=nO(m2)2m
Wenn wir dagegen den Rabin-Karp-Algorithmus verwenden , erhalten wir (im Durchschnitt) Zeit. Unsere Eingabe bestand aus beiden Zeichenfolgen, daher hatte unsere Eingabe auch die Größe . Daher würde dies allgemein als linear bezeichnet.O ( m + n )O(m+n)O(m+n)
Zusammenfassend lässt sich sagen: wird im Allgemeinen für Dinge wie Matrixmultiplikation als linear bezeichnet, da es in der Größe der Eingabe linear ist, aber im Allgemeinen für Dinge wie String-Matching als quadratisch, da die Eingabe kleiner ist. Welcher Begriff angemessen ist, hängt vom Kontext ab, in dem Sie ihn verwenden.O(mn)