Matematyka dyskretna 1/Wykład 9: Asymptotyka

Z Studia Informatyczne
Wersja z dnia 18:58, 21 sie 2006 autorstwa Pitab (dyskusja | edycje)
(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)
Przejdź do nawigacjiPrzejdź do wyszukiwania

Widzieliśmy już, że wskazanie postaci zwartej dla ciągu zadanego równaniem rekurencyjnym jest często zadaniem niełatwym. Do tej pory nie jest znana zwarta postać wielu równań. Na szczęście często jesteśmy w sytuacji, w której zadowoli nas przybliżenie odpowiedzi. Wróćmy do rozważanej wielokrotnie sumy kolejnych kwadratów i=0ni2. Fakt, że jest to wielomian 3-go stopnia zmiennej n, to już wartościowa informacja, często zupełnie wystarczająca. Spotkaliśmy się już nie raz z oszacowaniami poprzez zwykłe nierówności. To podejście często wymaga użycia narzędzi z analizy matematycznej, w szczególności znajdowania ekstremum funkcji.

Przykład

Silnię liczby naturalnej można trywialnie oszacować przez n!=1nnn. Przyjrzyjmy się delikatniejszemu oszacowaniu wskazującemu także dolne ograniczenie na n!.

Najpierw zauważmy, że


(n!)2=(1n)(n1)=i=1ni(n+1i).


Potraktujmy i(n+1i)=14(n+1)2(i12(n+1))2 jako wielomian drugiego stopnia zmiennej i. Łatwo zauważyć, że dla i[1,,n] przybiera on najmniejszą wartość w punkcie i=1, a największą w punkcie i=12(n+1). Zatem dla i{1,,n}  mamy ni(n+1i)14(n+1)2 i dalej


nn(n!)2(14(n+1))n,


czyli


nn2n!(n+12)n.


Nierówności w oszacowaniach bywają niepotrzebnie krępujące. Zaś wyniki w ten sposób otrzymane, często skupiają naszą uwagę na zbędnych i czasem nieinteresujących detalach. Często bowiem wystarczają nam przybliżone, asymptotyczne oszacowania ciągów lub ogólniej funkcji. Opisują one zachowanie funkcji wraz ze wzrostem argumentu. Podczas przekształceń rachunkowych celowo ograniczamy naszą wiedzę o funkcji, dzięki czemu łatwiej jest rachować i otrzymać zadowalającą postać przybliżającą.

W oszacowaniach asymptotycznych posługujemy się ogólnie przyjętymi symbolami opisującymi asymptotyczne zachowanie jednej funkcji wobec drugiej. Najpowszechniej używany jest symbol O przydatny w analizie górnej granicy asymptotycznej. Po raz pierwszy tego symbolu użył niemiecki teorio-liczbowiec Paul Bachmann w 1894. Prace Edmunda Landau'a (także niemieckiego teorio-liczbowca) spopularyzowały tę notację, stąd czasami O jest nazywany symbolem Landau'a. Notację asymptotyczną wprowadzimy jedynie dla funkcji zdefiniowanych na zbiorze (lub jego podzbiorach postaci k) o wartościach w .

Notacja asymptotyczna

Funkcja asymptotycznie niewiększa od funkcji g(n) to taka funkcja f:, dla której istnieją c>0 i n0, że Parser nie mógł rozpoznać (błąd składni): {\displaystyle \left\vertf(n)\right\vert\leq c\cdot\left\vertg(n)\right\vert} dla wszystkich nn0.
Będziemy też często mówić, że Parser nie mógł rozpoznać (błąd składni): {\displaystyle \left\vertf(n)\right\vert\leq c\cdot\left\vertg(n)\right\vert} zachodzi dla prawie wszystkich liczb naturalnych n.
Zbiór funkcji asymptotycznie niewiększych niż g(n) oznaczamy przez O(g(n)).

Rysunek: 7.1 Szkic na kartce

Ponieważ O(g(n)) jest zbiorem funkcji, poprawnie powinniśmy zapisywać f(n)O(g(n)), gdy f spełnia warunek podany w definicji. Jednak przyjęło się zapisywać f(n)=O(g(n)). Jest to pewne nadużycie symbolu równości =. Jednak tradycja, a jak się niebawem okaże, również i wygoda użycia, są wystarczającym usprawiedliwieniem dla tego nadużycia. W związku z tym napis f(n)=O(g(n)) czytamy "f(n) jest O-duże od g(n)".

Przykład

  • O(1), to zbiór funkcji ograniczonych.

Istotnie warunek |f(n)|c zachodzący dla prawie wszystkich n łatwo jest, poprzez zamianę stałej c na inną c, sprowadzić do warunku |f(n)|c zachodzącego już dla wszystkich n, jako że skończenie wiele wartości |f(n)| dla początkowych n daje się ograniczyć przez stałą.

    • każda funkcja stała jest O(1) np. f(n)=1000 jest O(1), bo |f(n)|=10001000 dla dowolnego n,
    • (1)n=O(1), bo |(1)n|1 dla dowolnego n,
    • 1n=O(1), bo 1n1 dla dowolnego n1,
    • lognn=O(1), bo logn<n dla n1, zatem lognn1 dla n1.
  • O(n) to zbiór funkcji ograniczonych przez funkcję liniową:
    • wszystkie funkcje O(1) są też O(n),
    • 10n+25=O(n), bo |10n+25|11n dla n25,
    • 2n+3logn100=O(n), bo |2n+3logn100|3n dla dowolnego n.
  • O(n2)
    • 3n2+10n1=O(n2),
    • n(n+1)2=O(n2),
    • 3logn+2=O(n2) (funkcja ta jest także O(n) i O(logn)).
  • O(2n)
    • 32n+n=O(2n), bo n2n,

a zatem 32n+n42n dla dowolnego n.

Więcej przykładów i ogólniejszych obserwacji poznamy po prezentacji pozostałych pojęć i symboli notacji asymptotycznej.

Funkcja asymptotycznie niemniejsza od funkcji g(n) to taka funkcja f:, dla której istnieją c>0 i n0, że c|g(n)||f(n)| dla wszystkich nn0.
Zbiór funkcji asymptotycznie niemniejszych niż g(n) oznaczamy przez Ω(g(n)).

Funkcja asymptotycznie podobna do funkcji g(n) to taka funkcja f:, dla której istnieją c0,c1>0 i n0, że c0|g(n)||f(n)|c1|g(n)| dla wszystkich nn0.
Zbiór funkcji asymptotycznie podobnych do g(n) oznaczamy przez Θ(g(n)). A zatem Θ(g(n))=O(g(n))Ω(g(n)).

Rysunek: Szkic na kartce.