Aby wyjaśnić dyskusję w komentarzach, ma znaczenie to, co mierzysz w odniesieniu do wzrostu.
Jak wspomniano @Kaveh, nie jest liniowe w obu w tym samym czasie, ale jest liniowe, jeśli jeden jest stały, a drugi rośnie.O(mn)
Z drugiej strony prawdopodobnie można by uznać za liniowe. Intuicyjnie, jeśli m podwaja się lub n podwaja się, a nawet jeśli oba m i n podwajają się, m + n nie może więcej niż podwoić. Nie jest to prawdziwe w odniesieniu do m n ; jeśli zarówno m, jak i n, podwójnie mO(m+n)mnmnm+nmnmn idzie się przez 4. To dlatego w wielu kontekstach, tym razem z systemem byłoby uznane kwadratowa. Podam przykład tego z dopasowaniem łańcucha w kilku akapitach.mn
Ale zwykle, gdy używasz Big- O notacji , używasz jej w odniesieniu do czegoś konkretnego. Ponieważ jesteśmy głównie teoretykami, zazwyczaj jest to wielkość wkładu w problem.
Weźmy na przykład dodatek macierzy. Dodanie dwóch macierzy zajmuje czas O ( m n ) . Ale każdy element naszego wkładu jest dotykany tylko raz, więc zwykle nazywa się to liniowym. Innymi słowy, nasze dane wejściowe mają rozmiar O ( m n ) , więc czas działania O ( m n )m×nO(mn)O(mn)O(mn) jest liniowy pod względem wielkości danych wejściowych.
Teraz spójrzmy na dopasowanie łańcucha - mianowicie, otrzymujemy łańcuch o rozmiarze i łańcuch o rozmiarze n i chcemy sprawdzić, czy występuje wystąpienie mniejszego ciągu w większym ciągu. Możemy to naiwnie sprawdzić w czasie O ( m n ) ; byłoby to ogólnie uważane za kwadratowe. Czemu? Jeśli m i n mogą być czymkolwiek, ustaw m = n . Zatem nasz czas pracy wynosi O ( m 2 ), a nasze dane wejściowe mają rozmiar 2 m .mnO(mn)mnm=nO(m2)2m
Z drugiej strony, jeśli użyjemy algorytmu Rabin-Karp , otrzymamy (średnio) czas . Nasze dane wejściowe składały się z obu ciągów, więc nasze dane wejściowe również miały rozmiar O ( m + n ) . W związku z tym byłoby to ogólnie określane jako liniowe.O(m+n)O(m+n)
Podsumowując: jest ogólnie nazywane liniowym dla rzeczy takich jak mnożenie macierzy, ponieważ jest liniowy w wielkości danych wejściowych, ale jest ogólnie nazywany kwadratowy dla rzeczy takich jak dopasowanie łańcucha ze względu na mniejsze dane wejściowe. To, który termin jest odpowiedni, zależy od kontekstu, w którym go używasz.O(mn)