Czy funkcje są zawsze asymptotycznie porównywalne?

15

Kiedy porównujemy złożoność dwóch algorytmów, zwykle dzieje się tak, że albo albo g ( n ) = O ( f ( n ) ) (ewentualnie oba), gdzie f i g to czasy działania (na przykład) dwóch algorytmów.f(n)=O(g(n))g(n)=O(f(n))fg

Czy tak jest zawsze? Oznacza to, że ma co najmniej jeden ze związków i g ( n ) = O ( f ( n ) ) zawsze utrzymywać, że jest ogólnie funkcji f , g ? Jeśli nie, jakie założenia musimy przyjąć i (dlaczego) jest ok, kiedy mówimy o czasach działania algorytmu?fa(n)=O(sol(n))sol(n)=O(fa(n))fasol

Raphael
źródło

Odpowiedzi:

21

Nie każda para funkcji jest porównywalna z notacją ; pod funkcji f ( n ) = n i g ( n ) = { 1 , gdy  n  jest liczbą nieparzystą , n 2 , gdy  n  jest nawet . Co więcej, funkcje takie jak g ( n ) faktycznie powstają jako czasy działania algorytmów. Rozważ oczywisty algorytm brute-force, aby ustalić, czy dana liczba całkowita n jest liczbą pierwszą:O()fa(n)=n

sol(n)={1gdyby n to jest dziwne, n2)gdyby n jest parzysty.
sol(n)n
IsPrime(n):
  for i ← 2 to (n-1)
     if i·⌊n/i⌋ = n
        return False
  return True

Algorytm ten wymaga operacji arytmetycznych gdy n jest parzyste, O ( Θ(1)noperacje, gdynjest złożone, aleΘ(n)operacje, gdynjest liczbą pierwszą. Zatem formalnie algorytm ten jestnieporównywalnyz algorytmem wykorzystującymO(n)nΘ(n)n operacji arytmetycznych dlakażdegon.n n

W większości przypadków, gdy analizujemy algorytmy, chcemy jedynie asymptotycznej górnej granicy formy dla pewnej stosunkowo prostej funkcji f . Na przykład większość podręczników po prostu (i poprawnie) raportuje, że działa w operacjach arytmetycznych O ( n ) . Typowe górne granice funkcji są iloczynami wykładników, wielomianów i logarytmów (chociaż czasami pojawiają się bardziej egzotyczne bestie, takie jak silnia i logarytmy iterowane ). Nietrudno udowodnić, że dowolne dwie takie funkcje są porównywalne.O(f(n))fIsPrime(n)O(n)

Zobacz także to pytanie MathOverflow .

JeffE
źródło
7

Z wikipedii, definicja dużej notacji O:

wtedy i tylko wtedy, gdy istnieje dodatnia stała M taka, że ​​dla wszystkich wystarczająco dużych wartości , f ( x ) jest co najwyżej M pomnożone przez g ( x ) w wartości bezwzględnej. To znaczy, f ( x ) O ( g ( x ) ) wtedy i tylko wtedy, gdy istnieje dodatnia liczba rzeczywista M i liczba rzeczywista x 0 taka, żexf(x)g(x)f(x)O(g(x))Mx0

|f(x)|<=M|g(x)|for allx>x0

Co dzieje się w przypadku funkcji, które nie są zbieżne (do stałej ani do nieskończoności)?

Spójrz na funkcje oraz g ( x ) = 10f(x)=|xsin(x)|g(x)=10

x0x>x0x=kπf(x)=0MMf(x)>g(x)g(x)O(f(x))

|xsin(x)|Mx0x>x0f(x)<Mg(x)f(x)O(g(x))

M.fa(x)sol(x), ten sam pomysł będzie miał zastosowanie do sol(x)=log(x)

amit
źródło
6

Oto para funkcji monotonicznych , które nie są asymptotycznie porównywalne. Jest to istotne, ponieważ większość złożoności powstających w praktyce jest w rzeczywistości monotoniczna.

f(x)=Γ(x+1)=x!
g(x)=Γ(x1/2+3/2)

Here, Γ is the gamma function. The second function is specially constructed to be very similar to the factorial, just "sampled" at slightly offset points in the gamma function. The functions cross each other periodically in such a way that neither is asymptotically bound by the other.

Ambroz Bizjak
źródło
4

Let L be the class of functions obtained from the identity function and constants using the following operations: addition, subtraction, multiplication, division, logarithm and exponential. For example, exp(2logx+loglogx)/x2. Hardy proved that for every two functions f,gL which are positive and tend to infinity, one of the following is true: f=o(g), f=ω(g), f/g tends to a constant. See page 18 of his book "Orders of infinity".

The upshot is that any two "simple" functions occurring in the analysis of algorithm are comparable. Here "simple" means that there is no definition by cases (other than finitely many base cases), and no surprising functions appear, such as the inverse Ackermann function which sometimes figures in running times.

Yuval Filmus
źródło
Nice! It is noteworthy, though, that periodic elements occur frequently in average case analysis (of d&c algorithm). The one I know are bound on both sides by constants, so they don't hurt asymptotic comparability.
Raphael