Twierdzenie o rekurencji uniwersalnej: Różnice pomiędzy wersjami

[wersja przejrzana][wersja przejrzana]
Usunięta treść Dodana treść
Nie podano opisu zmian
CiaPan (dyskusja | edycje)
m drobne redakcyjne – LaTeX: wyprostowane logarytmy
Linia 10:
to:
 
* Jeżeli <math>\! f(n) = O(n^{\log_ba-\epsilon})</math> dla pewnej stałej <math>\! \epsilon > 0</math>, to <math>\! T(n) = \Theta (n^{\log_ba})</math>
* Jeżeli <math>\! f(n) = \Theta(n^{\log_ba})</math>, to <math>\! T(n) = \Theta (n^{\log_ba}\cdot \log\ n)</math>
* Jeżeli <math>\! f(n) = \Omega(n^{\log_ba+\epsilon})</math> dla pewnej stałej ε > 0 i jeżeli <math>\! a\cdot f(\frac{n}{b})\leqslant c\cdot f(n)</math> dla pewnej stałej <math>\! c \in (0,1)</math>, dla dostatecznie dużych ''n'', to <math>\! T(n)=\Theta(f(n))</math>
 
Tak zdefiniowane funkcje ''T'' stanowią pewien schemat działania algorytmów typu "[[dziel i zwyciężaj]]" - problem o rozmiarze <math>\! n</math> dzielony jest na <math>\! a</math> podproblemów, każdy wielkości <math>\! \frac{n}{b}</math>, funkcja <math>\! f</math> przedstawia koszt dzielenia problemu, oraz połączenia rozwiązań podproblemów.
 
== Intuicyjna interpretacja ==
Każdy z trzech przypadków rekurencji uniwersalnej sprowadza się do stwierdzenia, która z funkcji <math>\! n^{\log_ba}</math> i ''f'' jest "większa". Gdy znana jest odpowiedź na to pytanie, automatycznie znane jest asymptotyczne ograniczenie danej rekursji - jest nią owa "większa funkcja".
 
== "Dziury" rekurencji uniwersalnej ==
Należy zdawać sobie sprawę, że twierdzenie o rekurencji uniwersalnej nie wyczerpuje wszystkich przypadków, nawet rekursji "typu" <math>\! T(\frac{n}{b}) + f(n)</math> - pomiędzy przypadkami twierdzenia istnieją "dziury". W pierwszym przypadku funkcja ''f'' musi być '''wielomianowo''' mniejsza od <math>\! n^{\log_ba}</math>. W trzecim przypadku oprócz '''wielomianowej''' większości wymagana jest pewna "regularność", "gładkość" funkcji. Jeżeli funkcja ''f'' należy do którejś z tych funkcji dla których nie ma "wielomianowej różnicy", to twierdzenie o rekursji uniwersalnej nie pozwala znaleźć asymptotycznego oszacowania rekursji.
 
== Dowód twierdzenia o rekurencji uniwersalnej ==
Linia 33:
to
 
: <math>\! T(n)\ =\ \Theta (n^{\log_ba})\ +\ \sum_{j = 0}^{\log_bn-1} a^j\cdot f(\frac{n}{b^j})</math> (*)
 
===== Dowód =====
Linia 42:
* Ogólniej, dla <math>j<b</math> istnieje <math>\! a^j</math> węzłów o koszcie <math>\! f(\frac{n}{b^j})</math> oddalonych od korzenia o odległość ''j''.
 
** Koszt każdego liścia wynosi <math>\! T(1)\ =\ \Theta (1)</math>, a ponieważ <math>\! \frac{n}{b^{\log_bn}}\ =\ 1</math> to każdy liść znajduje się na głębokości <math>\! \log_bn</math>. Drzewo rekursji posiada <math>\! a^{\log_bn}\ =\ n^{\log_ba}</math> liści.
 
Sumując koszty wszystkich poziomów drzewa otrzymamy równanie (*), ponieważ koszt wszystkich "poziomów" węzłów właściwych (tj. niebędących liśćmi) wynosi <math> \sum_{j = 0}^{\log_bn-1} a^j\cdot f(\frac{n}{b^j})</math> a koszt liści to <math>\! \Theta (n^{\log_ba})</math>
 
==== Lemat 2 ====
Linia 53:
To dla ''n'' będących potęgami ''b'' funkcję ''g'' można oszacować:
 
** Jeżeli <math>\! f(n) = O(n^{\log_ba-\epsilon})</math> dla pewnej stałej <math>\! \epsilon > 0</math>, to <math>\! g(n) = \Theta (n^{\log_ba})</math>
** Jeżeli <math>\! f(n) = \Theta(n^{\log_ba})</math>, to <math>\! g(n) = \Theta (n^{\log_ba}\cdot \lg\ n)</math>
** Jeżeli <math>\! f(n) = \Omega(n^{\log_ba+\epsilon})</math> dla pewnej stałej ε > 0 i jeżeli <math>\! a\cdot f(\frac{n}{b})\leqslant c\cdot f(n)</math> dla pewnej stałej <math>\! c \in (0,1)</math>, dla dostatecznie dużych ''n'', to <math>\! g(n)=\Theta(f(n))</math>
 
===== Dowód =====
Linia 62:
Korzystając z oszacowania z lematu 2 dla sumy (*). Dla kolejnych przypadków z lematu 2 zachodzi:
 
* <math>\! T(n)\ =\ \Theta (n^{\log_ba})\ +\ O(n^{\log_ba})\ =\ \Theta(n^{\log_ba})</math>
 
* <math>\! T(n) = \Theta (n^{\log_ba}) + \Theta(n^{\log_ba}\cdot \ln\ n) = \Theta(n^{\log_ba}\cdot \ln\ n)</math>
 
* <math>\! T(n) = \Theta (n^{\log_ba}) + \Theta(f(n)) = \Theta(f(n))</math>, ponieważ <math>\! f(n) = \Omega (n^{\log_ba + \epsilon})</math>
 
=== Dla dowolnych n ===