Twierdzenie o rekurencji uniwersalnej

Z Wikipedii, wolnej encyklopedii

Twierdzenie o rekurencji uniwersalnej jest twierdzeniem matematycznym pozwalającym w łatwy sposób znajdować ograniczenie asymptotyczne pewnej klasy funkcji zdefiniowanych rekurencyjnie.

Twierdzenie o rekurencji uniwersalnej[edytuj | edytuj kod]

Jeżeli funkcja dla i funkcji dodatniej jest zdefiniowana następująco:

to:

  • jeżeli dla pewnej stałej to
  • jeżeli to
  • jeżeli dla pewnej stałej ε > 0 i jeżeli dla pewnej stałej dla dostatecznie dużych to

Tak zdefiniowane funkcje stanowią pewien schemat działania algorytmów typu „dziel i zwyciężaj” – problem o rozmiarze dzielony jest na podproblemów, każdy wielkości funkcja przedstawia koszt dzielenia problemu, oraz połączenia rozwiązań podproblemów.

Intuicyjna interpretacja[edytuj | edytuj kod]

Każdy z trzech przypadków rekurencji uniwersalnej sprowadza się do stwierdzenia, która z funkcji i 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[edytuj | edytuj kod]

Należy zdawać sobie sprawę, że twierdzenie o rekurencji uniwersalnej nie wyczerpuje wszystkich przypadków, nawet rekursji „typu” – pomiędzy przypadkami twierdzenia istnieją „dziury”. W pierwszym przypadku funkcja musi być wielomianowo mniejsza od W trzecim przypadku oprócz wielomianowej większości wymagana jest pewna „regularność”, „gładkość” funkcji. Jeżeli funkcja 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[edytuj | edytuj kod]

Dla n będących potęgą b[edytuj | edytuj kod]

Niech będzie potęgą liczby rzeczywistej takiej, że

Lemat 1[edytuj | edytuj kod]

Niech zmienne i funkcja będą zdefiniowane jak powyżej. Jeśli dla pewnej dodatniej liczby całkowitej funkcja jest zdefiniowana następująco:

to

(*)
Dowód[edytuj | edytuj kod]

Rozważmy drzewo rekursji funkcji zdefiniowanej jak wyżej.

  • Koszt korzenia drzewa wynosi a jego każdego z synów – Dla każdego syna korzenia koszt każdego z jego synów wynosi A więc istnieje dokładnie węzłów leżących w odległości 2 od korzenia.
  • Ogólniej, dla istnieje węzłów o koszcie oddalonych od korzenia o odległość
    • Koszt każdego liścia wynosi a ponieważ to każdy liść znajduje się na głębokości Drzewo rekursji posiada 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 a koszt liści to

Lemat 2[edytuj | edytuj kod]

Niech i będą określone jak powyżej. Jeżeli jest funkcją określoną dla będących potęgami w następujący sposób:

To dla będących potęgami funkcję można oszacować:

    • jeżeli dla pewnej stałej to
    • jeżeli to
    • jeżeli dla pewnej stałej ε > 0 i jeżeli dla pewnej stałej dla dostatecznie dużych to

Dowód[edytuj | edytuj kod]

Korzystając z oszacowania z lematu 2 dla sumy (*). Dla kolejnych przypadków z lematu 2 zachodzi:

  • ponieważ

Dla dowolnych n[edytuj | edytuj kod]

Dla dowolnych (nie będących potęga ) wartość argumentu może oznaczać lub

Odpowiednio górne i dolne oszacowanie dla funkcji

(1)

i

(2)

jest banalne do znalezienia, przy wykorzystaniu własności i

Równanie rekurencyjne można oszacować z góry w następujący sposób:

Niech

Wtedy schodzenie w dół rekursji oznacza jej rekurencyjne wywoływanie kolejno dla argumentów

Korzystając z nierówności mamy:

Dla

Oznacza to, że dla wywołań rekursji na poziomie co najmniej i większych, rozmiar problemu jest stały.