Analiza Algorytmów Moduł 3 Rekurencje

Podobne dokumenty
Teoretyczne podstawy informatyki

Krzysztof Gniłka. Twierdzenie o rekurencji uniwersalnej

TEORETYCZNE PODSTAWY INFORMATYKI

Rekurencje. Jeśli algorytm zawiera wywołanie samego siebie, jego czas działania moŝe być określony rekurencją. Przykład: sortowanie przez scalanie:

Algorytmy i Struktury Danych.

Matematyczne Podstawy Informatyki

Wykład z równań różnicowych

i = n = n 1 + n 2 1 i 2 n 1. n(n + 1)(2n + 1) n (n + 1) =

Strategia "dziel i zwyciężaj"

Podstawy Informatyki. Sprawność algorytmów

Efektywna metoda sortowania sortowanie przez scalanie

Sortowanie przez scalanie

Matematyka dyskretna dla informatyków

Wykład 8. Informatyka Stosowana. 26 listopada 2018 Magdalena Alama-Bućko. Informatyka Stosowana Wykład , M.A-B 1 / 31

Zaawansowane algorytmy i struktury danych

Algorytmy i Struktury Danych

Uwaga: Funkcja zamień(a[j],a[j+s]) zamienia miejscami wartości A[j] oraz A[j+s].

Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami

Wykład 7. Informatyka Stosowana. 21 listopada Informatyka Stosowana Wykład 7 21 listopada / 27

Rozwiązywanie zależności rekurencyjnych metodą równania charakterystycznego

Funkcja kwadratowa. f(x) = ax 2 + bx + c = a

Matematyka dyskretna. Andrzej Łachwa, UJ, /14

Równania różnicowe. Dodatkowo umawiamy się, że powyższy iloczyn po pustym zbiorze indeksów, czyli na przykład 0

Funkcja kwadratowa. f(x) = ax 2 + bx + c,

Przykładowe zadania z teorii liczb

Funkcje wymierne. Jerzy Rutkowski. Działania dodawania i mnożenia funkcji wymiernych określa się wzorami: g h + k l g h k.

Indukcja. Materiały pomocnicze do wykładu. wykładowca: dr Magdalena Kacprzak

Ciagi liczbowe wykład 4

Ciągi liczbowe wykład 3

Logarytmy. Funkcje logarytmiczna i wykładnicza. Równania i nierówności wykładnicze i logarytmiczne.

Wstęp do metod numerycznych Eliminacja Gaussa Równania macierzowe. P. F. Góra

Metody Numeryczne Wykład 4 Wykład 5. Interpolacja wielomianowa

Programowanie dynamiczne cz. 2

Matematyka Dyskretna. Andrzej Szepietowski. 25 czerwca 2002 roku

Wykład z równań różnicowych

Finanse i Rachunkowość studia niestacjonarne Wprowadzenie do teorii ciągów liczbowych (treść wykładu z 21 grudnia 2014)

Wykład 2. Poprawność algorytmów

Metody numeryczne I Równania nieliniowe

Wykład 4: Iteracja, indukcja i rekurencja

Rekurencja. Przykład. Rozważmy ciąg

Struktury danych i złożoność obliczeniowa Wykład 2. Prof. dr hab. inż. Jan Magott

Wstęp do programowania. Dziel i rządź. Piotr Chrząstowski-Wachtel

Obliczenia naukowe Wykład nr 6

Luty 2001 Algorytmy (4) 2000/2001

Jeśli czas działania algorytmu zależy nie tylko od rozmiaru danych wejściowych i przyjmuje różne wartości dla różnych danych o tym samym rozmiarze,

VI. Równania różniczkowe liniowe wyższych rzędów

TEORETYCZNE PODSTAWY INFORMATYKI

Algorytmy i Struktury Danych, 2. ćwiczenia

Analiza algorytmów zadania podstawowe

Wykład 5. Informatyka Stosowana. 7 listopada Informatyka Stosowana Wykład 5 7 listopada / 28

Matematyka Dyskretna 2/2008 rozwiązania. x 2 = 5x 6 (1) s 1 = Aα 1 + Bβ 1. A + B = c 2 A + 3 B = d

Algorytmy w teorii liczb

Rozdział 6. Ciągłość. 6.1 Granica funkcji

Matematyka dyskretna

Rozdział 4. Ciągi nieskończone. 4.1 Ciągi nieskończone

Zasady analizy algorytmów

Za pierwszy niebanalny algorytm uważa się algorytm Euklidesa wyszukiwanie NWD dwóch liczb (400 a 300 rok przed narodzeniem Chrystusa).

VII. Elementy teorii stabilności. Funkcja Lapunowa. 1. Stabilność w sensie Lapunowa.

Wyk lad 7 Baza i wymiar przestrzeni liniowej

Rekurencja. Dla rozwiązania danego problemu, algorytm wywołuje sam siebie przy rozwiązywaniu podobnych podproblemów. Przykład: silnia: n! = n(n-1)!

Porównanie czasów działania algorytmów sortowania przez wstawianie i scalanie

Łatwy dowód poniższej własności pozostawiamy czytelnikowi.

Wstęp do metod numerycznych Uwarunkowanie Eliminacja Gaussa. P. F. Góra

Treść wykładu. Pierścienie wielomianów. Dzielenie wielomianów i algorytm Euklidesa Pierścienie ilorazowe wielomianów

Znaleźć wzór ogólny i zbadać istnienie granicy ciągu określonego rekurencyjnie:

Rozdział 1 PROGRAMOWANIE LINIOWE

5. Rozwiązywanie układów równań liniowych

Tematyka do egzaminu ustnego z matematyki. 3 semestr LO dla dorosłych

Układy równań i równania wyższych rzędów

Zaliczenie. Egzamin. lub. Wykład. Zaliczenie. Ćwiczenie. 3 zadania. Projekty. Ocena. Na ocenę

n=0 (n + r)a n x n+r 1 (n + r)(n + r 1)a n x n+r 2. Wykorzystując te obliczenia otrzymujemy, że lewa strona równania (1) jest równa

Elementy metod numerycznych

Algorytmy i struktury danych. Wykład 4

Wymagania edukacyjne z matematyki klasa II technikum

Analiza algorytmów zadania podstawowe

Algorytmy i Struktury Danych.

Zaawansowane algorytmy i struktury danych

Analiza Algorytmów - Moduł 2- Ćwiczenia

Matematyka Dyskretna Zestaw 2

Przedmiotowy system oceniania wraz z określeniem wymagań edukacyjnych klasa druga zakres rozszerzony

Programowanie Współbieżne. Algorytmy

Metody numeryczne. dr Artur Woike. Ćwiczenia nr 2. Rozwiązywanie równań nieliniowych metody połowienia, regula falsi i siecznych.

Układy równań i nierówności liniowych

Wyk lad 11 1 Wektory i wartości w lasne

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

Rozwiazywanie układów równań liniowych. Ax = b

W. Guzicki Zadanie IV z Informatora Maturalnego poziom rozszerzony 1

PLAN WYNIKOWY DLA KLASY DRUGIEJ POZIOM PODSTAWOWY I ROZSZERZONY. I. Proste na płaszczyźnie (15 godz.)

Programowanie Równoległe i Rozproszone. Algorytm Kung a. Algorytm Kung a. Programowanie Równoległe i Rozproszone Wykład 8. Przygotował: Lucjan Stapp

Projektowanie i analiza algorytmów

Wykład 3. Metoda dziel i zwyciężaj

Klasa 1 technikum. Poniżej przedstawiony został podział wymagań na poszczególne oceny szkolne:

Projekt Era inżyniera pewna lokata na przyszłość jest współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

S n = a 1 1 qn,gdyq 1

Matematyka i Statystyka w Finansach. Rachunek Różniczkowy

Metody numeryczne I. Janusz Szwabiński. Metody numeryczne I (C) 2004 Janusz Szwabiński p.1/61

Algorytmy i Struktury Danych

Funkcje wymierne. Funkcja homograficzna. Równania i nierówności wymierne.

Złożoność obliczeniowa algorytmu ilość zasobów komputera jakiej potrzebuje dany algorytm. Pojęcie to

2. FUNKCJE. jeden i tylko jeden element y ze zbioru, to takie przyporządkowanie nazwiemy FUNKCJĄ, lub

Transkrypt:

Analiza Algorytmów Moduł 3 Rekurencje Aleksandra Orpel Spis treści 1 Rekurencja - rozwiazania dokładne 2 1.1 Rekurencje pierwszego rzędu... 2 1.2 Rekurencje liniowe wyższych rzędów... 3 2 Rekurencje - oszacowania asymptotyczne 5 3 Algorytmy typu dziel i zwyciężaj 10 4 Sortowanie przez scalanie 12 5 Bibliografia 18 1

1 Rekurencja - rozwiazania dokładne 1.1 Rekurencje pierwszego rzędu Twierdzenie 1. Niech fx n g n2n rekurencji jest nastepuj ac a R. Jawna postać ci agu danego za pomoca a 0 =1 a n = x n a n 1 dla n > 0 a n = Y 1 k n (1) x k dla n > 0. (2) Przykład 1. Podstawiaj ac x n = n, wzór (1) daje a n = n!, natomiast dla x n =2z (1) dostajemy a n =2 n. Twierdzenie 2. Ciag dany za pomoc a rekurencji a 0 =0 a n = y n + a n 1 dla n > 0, gdzie fy n g n2n R, ma nastepuj ac ajawn apostać a n = y k dla n > 0. 1 k n (3) Twierdzenie 3. Niech fx n g n2n i fy n g n2n bedaci agmi liczb rzeczywistych i x n 6=0dla dowolnego n>0. Rozwi azaniem równania rekurencyjnego a 0 =0 (4) a n = y n + x n a n 1 dla n > 0 jest ciag postaci a n = y n + y j x j+1 x j+2... x n (5) dla n>0. 1 j n 1 Dowód. Podzielmy obie strony równości (4) przez iloczyn x 1 x 2...x n 1 x n. Mamy wówczas dla każdego n>0 a n y n a n 1 = +. (6) x 1 x 2... x n 1 x n x 1 x 2... x n 1 x n x 1 x 2... x n 1 Połóżmy b 0 =0 a b n = n x 1 x 2 ::: x n 1 x n dla n > 0 2

i y n z n = dla dowolnego n 2 N. x 1 x 2... x n 1 x n Równość (6)można zapisać wpostaci b n = z n + b n 1 dla n>0. Korzystajac z twierdzenia 2 mamy b n = z k = y k. x 1 x 2... x k 1 x k Stad 1 k n 1 k n a n = x 1 x 2... x n 1 x n 1 k n = x 1 x 2... x n 1 x n y k x 1 x 2... x k 1 x k 1 k n y k x 1 x 2...x k 1 x k y n + y k x k+1 x k+2... x n 1 x n. 1 k n 1.2 Rekurencje liniowe wyższych rzędów Twierdzenie 4. (O rozwiazaniach rekurencji liniowych, jednorodnych ze stałymi współczynnikami) Ogół rozwiazań rekurencji postaci a n = x 1 a n 1 + x 2 a n 2 +... + x t a n t dla n t (7) ( x t 6=0)jestdanyjakoliniowakombinacja(owspółczynnikach zależnych od warunków poczatkowych a 0,a 1,..., a t ) wyrażeń n j β n, 0 j<v, gdzie - β jest pierwiastkiem nastepuj acego wielomianu q(z) =z t x 1 z t 1 x 2 z t 2... x t (8) - v jest krotnościa pierwiastka β. Wielomian q nazywamy wielomianem charakterystycznym równania rekurencyjnego (7), natomiast ciagi n j β nª n2n, gdzie 0 j<v, jego rozwiazaniami szczególnymi. (Oczywiście β może być pierwiastkiem zespolonym). 3

Uwaga: Rozwiazanie jawne rekurencji (7) jest zdeterminowane przez warunki poczatkowe, z których wyznaczamy współczynniki liniowej kombinacji opisujacej ogół rozwiazań. W pewnych przypadkach właśnie od wartości poczatkowych zależy rodzaj otrzymanego rozwiazania. Majac tę sam azależność rekurencyjna izmieniaj ac tylko warunki poczatkowe możemy zmienić charakter rozwiazania, uzyskujac ciag stały, wykładniczy lub naprzemienny. Dzieje się tak na przykład wtedy, gdy niektóre współczynniki znikaja lub gdy pierwiastki wielomianu charaktery maja tesamemoduły. Jak duży wpływ na ostatecznapostaćci agu fa n g n2n maja wartości poczatkowe a 0,..., a t 1 pokazuje przykład opisany w punkcie (d) Zadania 2. Rozważymy teraz rekursję, która uzyskujemy z (7) dodajac do prawej strony wzoru ciag fb n g n2n. Otrzymana w ten sposób rekurencja nazywa się niejednorodna. Wyznaczajac jej rozwiazanie będziemy wykorzystywać twierdzenie 4. Istotnym problemem, który pojawia się wówczas, jest znalezienie rozwiazania szczególnego rekurencji niejednorodnej. W przypadku, gdy fb n g n2n jest ciagiem stałym, można podać proste procedury pozwalajace wyznaczyć takie rozwiazanie. Twierdzenie 5. (O istnieniu rozwiazania równania niejednorodnego) Ogół rozwiazań rekurencji postaci a n = x 1 a n 1 + x 2 a n 2 +... + x t a n t + b dla n t (9) jest sumaogółurozwi azań równania (7) oraz rozwi azania szczególnego równania (9). Twierdzenie 6. (O postaci rozwiazania szczególnego rekurencji niejednorodnej) 1. Jeżeli P i=1;:::;t x i 6= 1to rozwiazaniem szczególnym jest ciag stały fx n g n2n o wyrazach x n = c, gdzie c = b 1 P i=1;:::;t x. i 2. Jeżeli P i=1;:::;t x i =1i P i=1;:::;t ix i 6= 0to rozwiazaniem szczególnym jest ciag fcng n2n, gdzie b c = P i=1;:::;t ix. i 3. Ogólnie: rozwiazaniem szczególnym rekursji niejednorodnej (9) jest ciag fcn m g n2n, gdzie m jest pewnaliczb anaturaln amniejsz aodt. (Stała c wyznaczamy podstawiajac wyrazy ciagu do równania (9) 4

2 Rekurencje - oszacowania asymptotyczne Przedstawimy trzy metody wyznaczania rozwiazań asymptotycznych rekurencji: metodę podstawiania, iteracyjna oraz metodę opartanatwierdzeniu o rekurencji uniwersalnej. 1. Metoda podstawiania - polega na odgadnięciu oszacowania, a następnie wykazaniu, że jest ono trafne. 2. Metoda iteracyjna - gdzie przekształcamy rekurencję w sumę, a następnie korzystamy z różnych technik szacowania sum. (Obie metody omówimy na przykładach - ćwiczenia do Modułu 3) 3. Metoda rekurencji uniwersalnej - stosowana jest dla rekursji postaci T (n) =at (n/b)+f(n) (10) gdzie a 1, b>1, fjest pewna funkcjanieujemn aokreślona na podzbiorze liczb naturalnych. Rekurencja (10) opisuje czas działania algorytmu, który dzieli problem rozmiaru n na a podproblemów o rozmiarze n/b. Każdy z a podproblemów jest rozwiazywany rekurencyjnie w czasie T (n/b). Koszt dzielenia problemu oraz łaczenia rezultatów częściowych jest opisany funkcja f. Twierdzenie 6. (Twierdzenie o rekurencji uniwersalnej). Zał óżmy, że a 1 i b>1 sastałymi, f jest funkcjaokreślon a na zbiorze liczb naturalnych, a T bedzie ciagiem zdefiniowanym dla liczb całkowitych n 0 wzorem (10), gdzie n/b oznacza bn/bc lub dn/be. Wówczas T (n) może być ograniczony asymptotycznie w nastepuj acy sposób: 1. jeżeli istnieje ε>0 takie, że f(n) =O(n log b a " ), to T (n) =Θ(n log b a ); 2. jeżeli f(n) =Θ(n log b a ), to T (n) =Θ(n log b a lg n); 3. jeżeli istnieje ε>0takie, że f(n) =Ω(n log b a+" ) ijeśli dodatkowo istnieje stała 0 <c<1 taka, że dla dostatecznie dużych n 2 N ( n b) zachodzi nastepuj acy warunek (zwany warunkiem regularności) to T (n) =Θ(f(n)). af(n/b) cf(n), Dowód: Pierwsza część dowoduzawiera analizę zależności rekurencyjnej przy założeniu, że n jest potęga liczby b > 1, gdzie b niekoniecznie jest liczba całkowita. Dowód ten przeprowadzimy w trzech etapach, w których zakładamy, 5

że a 1, b>1 i f jest pewna funkcjanieujemn azdefiniowanadladokładnych potęg b oraz Θ(1) dla n =1 T (n) = at (n/b)+f(n) dla n = b i (11), gdzie i 1. Etap 1. Wykażemy, że T (n) =Θ(n log b a )+ log b n 1 a j f(n/b j ). (12) W tym celu przekształcimy rekurencję wsumęzapomoca odpowiedniej liczby (równej log b n) iteracji wzoru (11): T (n) =f(n)+at (n/b) =f(n)+af(n/b)+a 2 T (n/b 2 )= f(n)+af(n/b)+a 2 f(n)+a 3 f(n/b 3 )+... + a log b n 1 f(n/b log b n 1 )+a log b n T (1). Biorac pod uwagę równości a log b n = n log b a oraz T (1) = Θ(1) iwłasności notacji Θ, otrzymujemy a log b n T (1) = Θ n log b a. Ostatecznie uzyskujemy zależność (12). Etap 2. Rozważmy funkcję g: n 2 N,istnieje j 2 N takie, że n = b jª! R zdefiniowananastępuj aco: g(n) = log b n 1 a j f(n/b j ). (13) Pokażemy, że może ona być ograniczona asymptotycznie dla dokładnych potęg b w jeden z poniższych sposobów: A-jeżeli f(n) =O(n log b a " ) dla pewnej stałej ε>0, to g(n) =O(n log b a ); B-jeżeli f(n) =Θ(n log b a ), to g(n) =Θ(n log b a lg n); C -jeżeli af(n/b) cf(n) dla pewnej stałej c<1iwszystkichn b, to g(n) =Θ(f(n)). Istotnie; w³ przypadku A zzałożenia dotyczacego funkcji f wnioskujemy, iż f( n b )=O n logb j b a ", co,wobecdefinicji g, daje j à logb! n 1 ³ n g(n) =O a j logb a ". (14) b j Jednocześnie prawdziwy jest ciag równości log b n 1 ³ log a j n logb a " b n 1 µ = n log b a " ab " b j 6 b log b a j = n log b a " log b n 1 (b " ) j

µ µ = n log b a " 1 b " log b n = n log 1 b " b a " n " 1. b " 1 Z uwagi na fakt, iż b i ε sastałymi, ostatnie wyrażenie redukuje siędon log b a " O (n " ). Ostatecznie uzyskujemy żadan a równość: W przypadku B mamy f( n b j )=Θ ³ n b j logb a, zatem g(n) =Θ g(n) =O(n log b a ). (15) Ã logb n 1 Postępujac jak poprzednio, uzyskujemy log b n 1 a j ³ n b j log b a = n log b a log b n 1 a j ³ n b j log b a! ³ log a j b n 1 b log b a = n log b a. 1=n log b a log b n idalej g(n) =Θ n log b a log b n = Θ n log b a lg n. W przypadku C należy najpierw zauważyć, że definicja funkcji g implikuje oszacowanie g(n) =Ω(f(n)) dla dokładnych potęg b. Jednocześnie założony warunek regularności implikuje, iż dlakażdego j =0, 1,..., log b n zachodzi a j f(n/b j ) c j f(n). (16) (Indukcyjny dowód tego faktu pozostawiamy jako ćwiczenie). Korzystajac z (16), możemy oszacować z góry g(n) wnastępujacy sposób g(n) log b n 1 ³ n a j f b j log b n 1 c j f (n) f(n) 1 c j = f(n) 1 c = O(f(n)). Etap 3. Biorac pod uwagę zależność (15), obliczamy sumę (12) dla pierwszego przypadku twierdzenia: W przypadku 2. otrzymujemy T (n) =Θ(n log b a )+O(n log b a )=Θ(n log b a ). T (n) =Θ(n log b a )+Θ(n log b a lg n) =Θ(n log b a lg n). W ostatnim przypadku mamy T (n) =Θ(n log b a )+Θ(f(n)), 7

co wobec założenia f(n) =Ω(n log b a+" ) przy pewnym ε>0, pozwala orzec, iż T (n) =Θ(f(n)). To kończy dowód dla dokładnych potęg b. Druga część dowodu,będzie rozszerzeniem powyższej analizy na przypadek dowolnych liczb naturalnych. W tej sytuacji w rekurencji pojawiasię funkcje sufitu lub podłogi. Zauważmy, że otrzymanie dolnego oszacowania dla T (n) =at (dn/be)+f(n) (17) lub górnego dla T (n) =at (bn/bc)+f(n) (18) wynika bezpośrednio z własności funkcji podłogiisufitu ( n b n b n b ). Na istotne trudności napotykamy dopiero wtedy, gdy próbujemy uzyskać górne oszacowanie dla (17) i dolne dla (18). Omówimy jedynie pierwszy z problemów, ponieważ analiza drugiego z nich jest analogiczna. Główna idea dowodu jest oczywiście taka sama, jak dla dokładnych potęg b, ztaróżnic a, że pojawiaja się nieco bardziej pracochłonne rachunki. Przedstawimy zatem tylko kluczowe elementy dowodu. Etap 1. Zauważmy, że iterujac rekurencję (17) uzyskujemy ciag rekurencyjnych wywołań dla argumentów n, dn/be, ddn/be /be, dddn/be /be /be,... itd. Dla wygody oznaczmy i. element tego ciagu przez przez n i, gdzie n gdy i =0 n i = dn i 1 /be gdy i > 0. Zpowyższej definicji i własności funkcji sufitu (dxe < x +1) uzyskujemy oszacowanie n i n b + i 1 1 i b n j b + b (19) i b 1 dla dowolnego i>0. Podobnie jak w etapie 1. pierwszej części dowodu przekształcamy rekurencję wsumę, wielokrotnie stosujac wzór (17), przy czym kończymy iterację dlai 0 = blog b nc. (Wówczas n i0 b + b b 1.) Stad mamy T (n) =f(n 0 )+at (n 1 )=f(n 0 )+af(n 1 )+a 2 T (n 2 ) (20) f(n 0 )+af(n 1 )+a 2 f(n 2 )+... + a blog b nc 1 f(n blogb nc 1)+a blog b nc T (n blogb nc) = Θ(n log b a )+ blog b nc 1 a j f(n j ). W ten sposób otrzymujemy dla dowolnych liczb naturalnych n zależność podobna do (12). 8

Etap 2. Możemy teraz oszacować sumę g(n) = blog b nc 1 a j f(n j ) wkażdym z trzech omawianych w twierdzeniu przypadków, w zależności od warunków nałożonych na f. Rozważmy przypadek pierwszy, gdy dla pewnej liczby ε>0 f(n) =O(n log b a " ). Wówczas dla każdego 0 j blog b nc istnieje stała c > 0 taka, że dla dostatecznie dużych n zachodzi µ n c b + b j b 1 ³ µ µ n logb a " b j b = c 1+ b j n b 1 logb a " b c b 1 f(n j ) cn log b a " j logb a " logb a " (21) µ µ µ µ n log b a " b j = c 1+ 1+ b logb a " n log b a " a j b "j n b 1 a j b, "j (przy czym druga nierówność wynika z (19), natomiast ostatnie przejście jest konsekwencja nierówności j blog b nc). Oznacza to f(n j )=O( nlog b a " ). a j b "j Podobnie postępujemy, gdy f(n) =Θ(n log b a ) (przypadek drugi twierdzenia). Wykonujac oszacowania analogiczne do (21) (pomijamy ε i wykorzystujemy własności notacji Θ), pokazujemy, że f(n j )=O( nlog b a ). a j W przypadku trzecim należy zauważyć, że z warunku regularności: af(dn/be) cf(n) dla n>b+ b/(b 1) przy stałej 0 <c<1, wynika a j f(n j ) c j f(n) dla j =0, 1,..., blog b nc, co wykazujemy tak, jak w pierwszej części dowodu. Wykorzystujac powyższe wyniki możemy sumę g(n) odpowiednio oszacować i wyznaczyć rozwiazanie T jak dla dokładnych potęg b. Uwaga: Istotne jest, że w każdym z trzech przypadków porównujemy funkcję f z funkcja testujac a n 7! n log b a. Intuicyjnie na podstawie tezy twierdzenia możemy powiedzieć, że rozwiazanie zależy od większej z nich. W pierwszym przypadku funkcja f nie tylko musi być mniejsza od funkcji testujacej, ale musi być odniejwielomianowo mniejsza, tj. musi istnieć taka liczba ε>0, że f jest mniejsza od funkcji testujacej o czynnik n ". W trzecim przypadku funkcja f nie tylko musi być większa od funkcji testujacej, ale musi być odniej 9

wielomianowo większa oraz spełniać dodatkowy warunek regularności, który zachodzi dla większości wielomianowo ograniczonych funkcji. Uwaga: Warto zauważyć, że warunek regularności implikuje istnienie liczby ε > 0 takiej, że f(n) = Ω n log b a+" Mimo to w sformułowaniu trzeciego przypadku twierdzenia o rekurencji uniwersalnej występuje powyższa równość, gdyż upraszcza ona wstępna klasyfikację badanej rekurencji (patrz poprzednia uwaga). Uwaga: Trzy przypadki opisane w twierdzeniu o rekurencji uniwersalnej nie wyczerpuja wszystkich możliwych relacji między f a funkcja testujac a. Jest luka między przypadkiem 1 i 2, kiedy to f jest mniejsza od funkcji testujacej, ale nie jest mniejsza wielomianowo. Podobnie dla przypadków 2 i 3, istnieja rekurencje typu (10), w których funkcja f jest większa od n 7! n log b a, ale nie wielomianowo. Wobec tego, gdy f wpada w jednaztychlukniemożemy stosować twierdzenia o rekurencji uniwersalnej. Wówczas pozostajanammetody iteracyjna i podstawiania. Możemy także starać się oszacować rekurencję zgóry lub z dołu w ten sposób, aby otrzymać rekurencję, która można już rozwiazaćza pomoca jednego z przypadków twierdzenia 6. Należy jednak pamiętać, że wtedy otrzymujemy górne lub dolne oszaconie rozwiazania wyjściowej rekurencji. Przykład 2. Pokażemy, że dla rekurencji T (n) =2T (n/2) + n log 2 n nie można zastosować powyższego twierdzenia. Istotnie; kładac a = b =2mamy następujac a funkcję testuj aca n 7! n log b a = n. Jednocześnie f(n) =n log 2 n. Ponieważ f jest asymptotycznie większa od funkcji n 7! n log b a, więc może się wydawać, że stosować będziemy przypadek 3. Przypuśćmy zatem, że istnieje ε>0 takie, że f(n) =Ω(n 1+" ), co oznacza istnienie liczby A>0 spełniajacej relację f(n) n 1+" dla dostatecznie dużych n 2 N idalej log 2 n n " dla dostatecznie dużych n 2 N. To jednak przeczy równości lim Zatem przykład ten wpada w lukę między przypadkami 2 i 3. n!1 log 2 n n " =0. twierdzenie 2. Przyjmujac oznaczenia twierdzenia 6, można wykazać, że z warunku regularności wynika istnienie ε>0, dla którego zachodzi oszacowanie f(n) =Ω(n log b a+" ). 3 Algorytmy typu dziel i zwyciężaj Metoda dziel i zwyciężaj" polega na podziale problemu na kilka mniejszych podproblemów (tj. podproblemów o mniejszych rozmiarach danych wejściowych) 10

podobnych do pierwotnego. Podproblemy te sa rozwiazywane rekurencyjnie, a następnie ich rozwiazania sa łaczone w celu uzyskania rozwiazania wyjściowego problemu. W podejściu dziel i zwyciężaj każdy poziom rekursji składa się z następujacych etapów: Dziel: Dzielimy problem na podproblemy. Zwyciężaj: Rozwiazujemy podproblemy rekurencyjnie, chyba, że saonetak małego rozmiaru, że nie wymagaja zastosowania rekursji - używamy wtedy metod bezpośrednich. Połacz: Łaczymy rozwiazania podproblemów, aby otrzymać rozwiazanie problemu wyjściowego. Wobec powyższego analiza czasu działania algorytmów opartych na metodzie dziel i zwyciężaj polega na ocenie złożoności czasowej wszystkich trzech etapów. Rozważymy teraz pewien szczególny rodzaj tego typu algorytmów. Niech T (n) oznacza czas działania algorytmu dla problemu o rozmiarze n. Jeśli rozmiar problemu jest wystarczajaco mały n c dla pewnej stałej c, to jego rozwiazanie zajmuje czas stały Θ(1). Załóżmy, że dzielimy problem wyjściowy na a (a 1) podproblemów, każdy o rozmiarze n/b (dokładniej n b lub n b ), gdzie b>1, a,b2 Z. Niech dalej D(n) jest czasem dzielenia problemów na podproblemy, zaś C(n) czasem scalania ich rozwiazań wpełne rozwiazanie oryginalnego problemu. Wówczas czas działania takiego algorytmu dany jest następujac a rekurencja: T (n) = Θ(1) gdy n c at ( n b )+f(n) gdy n > c, (22) dla f(n) = C(n) +D(n). Jak pamiętamy twierdzenie 1 (wykład 4) podaje metodę rozwiazania tego typu rekurencji. Przeanalizujmy drzewo rekursji (22), aby pokazać, jakich algorytmów dotycza poszczególne przypadki opisane w twierdzeniu o rekurencji uniwersalnej. 11

Zauważmy, że funkcja n! n log b a informuje o liczbie podproblemów o najmniejszym rozmiarze, a zatem, wobec przyjętych założeń, algorytm potrzebuje n log b a Θ(1) jednostek czasu, aby rozwiazać wszystkietepodproblemy.funkcja f reprezentuje czas podziału problemu na podproblemy i łaczenie ich rozwiazań w rozwiazanie problemu wyjściowego. Stad przypadek pierwszy twierdzenia o rekurencji uniwersalnej (f(n) = O(n log b a " ), dla pewnego ε > 0) obejmuje algorytmy, w których koszt rozwiazania podproblemów o rozmiarach n<c,jest wielomianowo większy niż połaczone koszty etapów I-Dzieli III - Połacz algotytmu. Odwrotna sytuację opisuje punkt 3. twierdzenia, tam funkcja f jest co najmniej rzędu niż n log b a+", przy pewnym ε>0. Jeśli zaś koszt wszystkich etapów jest tego samego rzędu (rozkłada się on równomiernie po wszytkich poziomach drzewa rekursji), to złożoność czasowa algorytmu jest opisana przez przypadek 2. twierdzenia o rekurencji uniwersalnej. 4 Sortowanie przez scalanie Algorytm sortowania przez scalanie (łaczenie) jest przykładem zastosowania metody "dziel i zwyciężaj", wobec tego jego działanie można opisać zapomoca schematu charakterystycznego dla tego podejścia: Dziel Dzielimy n -elementowyci ag na dwa podciagi o rozmiarach, odpowiednio bn/2c i dn/2e każdy. Zwyciężaj Sortujemy otrzymane podciagi, używajac rekurencyjnie sortowania 12

przez scalanie. Połacz Łaczymy posortowane podciagi w jeden posortowany ciag. (Mechanizm rekursji nie uruchamia się, gdy ciag przeznaczony do sortowania ma długość 1.) Zapiszemy teraz badany algorytm nieco dokładniej, wykorzystujac przyjęty pseudojęzyk Mergesort(l, r : naturalne) Dane wejściowe: ciag elementów a =[a[l],..., a[r]], której bedziemy sortować; Dane wyjściowe: ciag [a[i 1 ],..., a[i r l+1 ]], bed acy permutacjaci agu a, spełniajac a warunek a[i 1 ] a[i 2 ]... a[i r l+1 ]; var i,j,k,m: naturalne begin if r l>0 then begin m := (r + l)div2; Mergesort(l, m); Mergesort(m +1,r); for i := 1 to m l +1do b[i] :=a[l + i 1]; for j:=m+1 to r do c[j-m]:=a[j]; i:=1;j:=1; b[m+1]:=max; c[r-m+1]:=max; 13

end; end. for k:=l to r do if b[i]<c[j] then begin a[k]:=b[i]; i:=i+1;end; else begin a[k]:=c[j]; j:=j+1; end; Chcac posortować cała tablicę a = [a[1],..., a[n]], wywołujemy Mergesort dla l =1ir = n. Wpowyższym zapisie występuje zmienna max, która jest największa z liczb w ustalonej reprezentacji liczb całkowitych. Wprowadzenie jej pozwoliło uniknać testu końca tablic b i c. Analizę powyższego algorytmu rozpoczniemy od wyznaczenia rzędu złożoności czasowej. Twierdzenie 7. Procedura Mergesort dla ciagu n - elementowego działa w czasie Θ(n lg n). Dowód: Niech T (n) oznacza czas potrzebny do posortowania n -elementowego ciagu. Zgodnie ze schematem "dziel i zwyciężaj" musimy zbadać, ile czasu potrzebanarealizację poszczególnych etapów: Dziel: Wyznaczenie środka przedziału - punktu podziału n+1 2 -zajmuje czas stały D(n) =Θ(1). Zwyciężaj: Rozwiazujemy rekurencyjnie dwa problemy każdy rozmiaru n/2 ( bn/2c lub dn/2e),co zajmuje czas 2T (n/2). Połacz: Procedura łaczenia działa w czasie C(n) =Θ(n) -trzypętle wykonuj ace co najwyżej n przebiegów każda. Przyjmujac, że sortowanie tablicy jednoelementowej odbywa się w czasie stałym Θ(1), uzyskujemy następujac a zależność rekurencyjna określajac a złożoność czasowa algorytmu Mergesort Θ(1) gdy n =1 T (n) = 2T ( n 2 )+C(n)+D(n) gdy n > 1 idalej T (n) = Θ(1) gdy n =1 2T ( n 2 )+Θ(n) gdy n > 1. 14

Kładac a =2, b =2if(n) =D(n) +C(n) =Θ(n) i korzystajac z punktu drugiego twierdzenia o rekurencji uniwersalnej mamy T (n) =Θ(n lg 2 lg n) =Θ(n lg n). Stwierdziliśmy już, że złożoność czasowa Mergesort jest rzędu liniowo-logarytmicznego. Nie zadowolimy się jeszcze ta informacja, gdyżniewiemy, jakiwspółczynnik kryje sięwnotacjiθ,może to być 2,3,4 wówczas otrzymany wynik odzwieciedla zachowanie algorytmu dla większości n. Jednak powyższa analiza nie pozwala nam wykluczyć przypadku, gdy współczynnik jest równy 10 20, 10 30, itd. Wtedy możemy powiedzieć, że czas działania jest liniowo-logarytmiczny tylko dla danych wejściowych o gigantycznych rozmiarach. Aby zbadać, jak jest w rzeczywistości, zajmijmy się ocena dokładnej liczby operacji dominujacych - porównań elementów ciagu sortowanego - wykonywanych przez Mergesort. Twierdzenie 8. Aby posortować n -elementow a tablicęzapomoc a sortowania przez scalanie należy wykonać n logn + O(n) porównań. Dowód: Dla uproszczenia tego dowodu zajmiemy się tylko tymi liczbami naturalnymi, które sa potęgami liczby 2. Niech C(n) oznacza liczbę porównań wykonywanych przez Mergesort przy sortowaniu n - elementowej tablicy. Wówczas liczba porównań wykonywanych w rekurencyjnych wywołaniach procedury po pierwszym podziale - sortowanie tablic dn/2e i bn/2c elemetowej - jest równa, odpowiednio C(dn/2e) oraz C(bn/2c). Liczba porównań wykonywanych w celu scalenia wynosi n - jedno dla każdej wartości k =1,..., n. Zatem całkowita liczba operacji dominujacych dana jest za pomoca rekurencji C(dn/2e)+C(bn/2c)+n dla n 2 C(n) = (23) 0 dla n =1. Ponieważ roważamy jedynie liczby naturalne n postaci n =2 k, dla pewnego k 2 N, rekurencję (23) możemy zapisać wnastępujacej formie 2C(2 C(2 k )= k 1 )+2 k dla k 1 0 dla k =0. Dzielac obie strony przez 2 k dostajemy C(2 k ) = C(2k 1 ) +1. 2 k 2 k 1 Iterujac k-krotnie powyższy wzór mamy C(2 k ) = C(2k 1 ) +1= C(2k 2 ) +2= C(2k 3 ) +3=... = C(20 ) + k = k, 2 k 2 k 1 2 k 2 2 k 3 2 0 15

co oznacza, że dla n =2 k rozwiazanie powyższej rekurencji jest C(n) =n log 2 n. W przypadku, gdy n jest dowolna liczba naturalna rozwiazanie rekurencji (23) wymaga pewnych dodatkowych obliczeń wykorzystujacych następujacy wzór sumacyjny: Lemat 9. Niech n 2 N. Dla dowolnej liczby naturalnej b 2 zachodzi blog b kc =(n +1)blog b nc bblog b nc+1 b. b 1 1 k n Twierdzenie 10. Dla dowolnego n 2 N liczba porównań wykonywanych przez Mergesort w celu posortowania n elementowej tablicy opisana jest rekurencja (23), której dokładne rozwiazanie ma postać C(n) =n blg nc +2n 2 blg nc+1. (24) Dowód: Wobec analizy przedstawionej w dowodzie twierdzenia 6. wystarczy jedynie wyznaczyć dokładne rozwiazanie rekurencji (23) dla dowolnych n 2 N. Rozważmy pomocniczo ciag 2 dla n =1 D(n) = C(n +1) C(n) dla n 2. Zauważmy, że D(bn/2c)+1 dla n 2 D(n) = 2 dla n =1. Istotnie, dla n parzystych mamy D(n) =C(d(n +1)/2e)+C(b(n +1)/2c)+n +1 C(dn/2e) C(bn/2c) n = C(n/2+1)+C(n/2) + n +1 C(n/2) C(n/2) n C(n/2+1) C(n/2) + 1 = D(bn/2c)+1. Podobnie postępujemy dla n nieparzystych D(n) =C(d(n +1)/2e)+C(b(n +1)/2c)+n +1 C(dn/2e) C(bn/2c) n (25) = C((n +1)/2) + C((n +1)/2) + n +1 C((n +1)/2) C((n 1)/2) n C((n 1)/2+1) C((n 1)/2) + 1 = D(bn/2c)+1. Zaten dla dowolnego n 2 zachodzi wzór (25). Wyznaczymy teraz jawnapostać ciagu D : D(n) =D(bn/2c)+1=D(bbn/2c /2c)+1+1 16

= D( n/2 2 j )+2=... = D( n/2 blg nck )+blg nc = blg nc +2. Stad C(n +1)=C(n)+blg nc +2 dla dowolnych n 1. Iteracja powyższego wzoru (odpowiednie twierdzenie 2 z wykładu o rozwiazaniach dokładnych rekurencji) pozwalajastwierdzić, że n C(n +1)= (blg kc +2) idalej,dlan 2 n 1 n 1 C(n) = (blg kc +2)=2n 2+ blg kc. k=1 k=1 k=1 Korzystajac zlematu3.możemy wyznaczyć wartość sumy n 1 blg kc =(n +1)blg nc 2 blg nc+1 +2 blg nc, k=1 ast ad mamy ostatecznie C(n) =n blg nc +2n 2 blg nc+1. Ćwiczenie 1. Zbadać własności funkcjibędacej rozwiazaniem rekurencji (23). Pokazać, że C(n) =n lg n + nθ(1 flg ng), gdzie θ(x) =1+x 2 x przyjmuje wartości dodatnie w przedziale (0, 1) idodatkowospełnia warunki θ(0) = θ(1) = 0 oraz 0 <θ(x) < 0.087 dla x 2 (0, 1). Rozwiazanie: Podstawiajac blg nc =lgn flg ng do wzoru (24), otrzymujemy C(n) =n lg n nflg ng+2n 2 lg n flg ng+1 1 flg ng = n lg n nflg ng+2n n2 = n lg n + n(2 flg ng 2 1 flg ng )=nlg n + nθ(1 flg ng). Aby uzyskać żadane oszacowanie wystarczy wyznaczyć wartość największa funkcji θ w przedziale [0, 1]. W tym celu wyznaczmy punkty stacjonarne, tzn. miejsca zerowe pochodnej funkcji θ : θ 0 (x) =1 2 x ln 2. 17

Jak łatwo wyliczyć (szczególnie za pomoca dowolnego programu matematycznego rozwiazaniem równania 1 2 x ln(ln 2) ln 2 = 0 jest liczba x 0 = ln 2 (¼ 0.528 77). Ponieważ θ(0) = θ(1) = 0 i θ(x 0 ) ¼ 8.607 1 10 2, wnosimy, że maksymalna wartość funkcji θ w przedziale [0, 1] nie przekracza 0.087, co ilustruje poniższy rysunek y 0.1 0.075 0.05 0.025 0 0 0.25 0.5 0.75 1 Wykres funkcji [0, 1] 3 x! θ(x) x 5 Bibliografia 1. Banachowski L., Diks K., Algorytmy i struktury danych, Wydawnictwo Naukowo-Techniczne, Warszawa 1996. 2. Cormen T.H., E.Leiserson Ch., Rivest R.L., Wprowadzenie do algorytmów, Wydawnictwo Naukowo-Techniczne, Warszawa, 2001. 3. Manber U., Introduction to Algorithms, Addison-Wesley Publishing Company, New York, 1989. 4. Sedgewick R., Flajolet P., An introduction to the Analysis of Algorithms, Addison-Wesley Publishing Company, New York, 1996. 18