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

Podobne dokumenty
Teoretyczne podstawy informatyki

TEORETYCZNE PODSTAWY INFORMATYKI

Krzysztof Gniłka. Twierdzenie o rekurencji uniwersalnej

Efektywna metoda sortowania sortowanie przez scalanie

Zaawansowane algorytmy i struktury danych

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

Metoda bisekcji (inaczej połowienia przedziału lub równych podziałów)

Podstawy Informatyki. Sprawność algorytmów

Strategia "dziel i zwyciężaj"

Sortowanie przez scalanie

1.UKŁADY RÓWNAŃ LINIOWYCH

Algorytmy i struktury danych Matematyka III sem.

S n = a 1 1 qn,gdyq 1

Rekurencja. Matematyka dyskretna

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

Zadania do samodzielnego rozwiązania

TEORETYCZNE PODSTAWY INFORMATYKI

Przykładowe zadania z teorii liczb

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

Algorytmy i Struktury Danych.

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

Wykład 4: Iteracja, indukcja i rekurencja

Program 14. #include <iostream> #include <ctime> using namespace std;

Zadanie 3 Oblicz jeżeli wiadomo, że liczby 8 2,, 1, , tworzą ciąg arytmetyczny. Wyznacz różnicę ciągu. Rozwiązanie:

Analiza Algorytmów. Informatyka, WPPT, Politechnika Wroclawska. 1 Zadania teoretyczne (ćwiczenia) Zadanie 1. Zadanie 2. Zadanie 3

Matura z matematyki?- MATURALNIE, Ŝe ZDAM! Zadania treningowe klasa I III ETAP

Wykład 2. Poprawność algorytmów

Zaawansowane algorytmy i struktury danych

Wykład 4. Określimy teraz pewną ważną klasę pierścieni.

Algorytmy i Struktury Danych, 2. ćwiczenia

WIELOMIANY I FUNKCJE WYMIERNE

Dr inż. Robert Wójcik, p. 313, C-3, tel Katedra Informatyki Technicznej (K-9) Wydział Elektroniki (W-4) Politechnika Wrocławska

Metody numeryczne w przykładach

Programowanie dynamiczne cz. 2

Obliczenia iteracyjne

Indukcja matematyczna

Matematyka dyskretna. Andrzej Łachwa, UJ, /14

KURS WSPOMAGAJĄCY PRZYGOTOWANIA DO MATURY Z MATEMATYKI ZDAJ MATMĘ NA MAKSA. przyjmuje wartości większe od funkcji dokładnie w przedziale

4. Postęp arytmetyczny i geometryczny. Wartość bezwzględna, potęgowanie i pierwiastkowanie liczb rzeczywistych.

O rekurencji i nie tylko

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

Wstęp do programowania

LX Olimpiada Matematyczna

Matematyka dyskretna dla informatyków

funkcje rekurencyjne Wykład 12. Podstawy programowania (język C) Funkcje rekurencyjne (1) Funkcje rekurencyjne (2)

jest rozwiązaniem równania jednorodnego oraz dla pewnego to jest toŝsamościowo równe zeru.

Algorytmy i struktury danych. Wykład 4

1. Liczby wymierne. x dla x 0 (wartością bezwzględną liczby nieujemnej jest ta sama liczba)

Obóz Naukowy Olimpiady Matematycznej Gimnazjalistów

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

Zaawansowane metody numeryczne

Definicja pochodnej cząstkowej

Równania i nierówności wykładnicze i logarytmiczne

Zadania do wykonania. Rozwiązując poniższe zadania użyj pętlę for.

Dwa równania kwadratowe z częścią całkowitą

WYRAŻENIA ALGEBRAICZNE

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

Algorytmy w teorii liczb

ZAJĘCIA 25. Wartość bezwzględna. Interpretacja geometryczna wartości bezwzględnej.

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

Definicja i własności wartości bezwzględnej.

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

Programowanie w VB Proste algorytmy sortowania

Analiza algorytmów zadania podstawowe

Próbny egzamin maturalny z matematyki Poziom rozszerzony

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

Matematyka Dyskretna. Andrzej Szepietowski. 25 czerwca 2002 roku

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

Metody numeryczne I Równania nieliniowe

Algorytmy i struktury danych

Testowanie hipotez statystycznych.

Analiza algorytmów zadania podstawowe

Runda 5: zmiana planszy: < < i 6 rzutów.

Rekurencja. Rekurencja zwana także rekursją jest jedną z najważniejszych metod konstruowania rozwiązań i algorytmów.

Statystyka i opracowanie danych Podstawy wnioskowania statystycznego. Prawo wielkich liczb. Centralne twierdzenie graniczne. Estymacja i estymatory

Wyszukiwanie. Wyszukiwanie binarne

Wstęp do programowania

Układy równań liniowych. Ax = b (1)

REKURENCJA W JĘZYKU HASKELL. Autor: Walczak Michał

Następnie przypominamy (dla części studentów wprowadzamy) podstawowe pojęcia opisujące funkcje na poziomie rysunków i objaśnień.

Wykład 1. Na początku zajmować się będziemy zbiorem liczb całkowitych

Matematyczne Podstawy Informatyki

Sortowanie. Kolejki priorytetowe i algorytm Heapsort Dynamiczny problem sortowania:

Matematyka dyskretna. Andrzej Łachwa, UJ, A/15

Jednostki informacji. Bajt moŝna podzielić na dwie połówki 4-bitowe nazywane tetradami (ang. nibbles).

ALGORYTMY OPTYMALIZACJI wyklad 3.nb 1. Wykład 3. Sformułujemy teraz warunki konieczne dla istnienia rozwiązań zagadnienia optymalizacyjnego:

Programowanie dynamiczne i algorytmy zachłanne

1 Metody rozwiązywania równań nieliniowych. Postawienie problemu

EGZAMIN MATURALNY W ROKU SZKOLNYM 2014/2015

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

Pierwiastki pierwotne, logarytmy dyskretne

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,

2. DZIAŁANIA NA WIELOMIANACH

OLIMPIADA MATEMATYCZNA

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

EGZAMIN MATURALNY Z MATEMATYKI

SCENARIUSZ LEKCJI Z MATEMATYKI. opracowała Hanna Szmyt

Liczby zespolone. x + 2 = 0.

Algorytmy zrandomizowane

Algorytmy i struktury danych

Transkrypt:

Rekurencje Jeśli algorytm zawiera wywołanie samego siebie, jego czas działania moŝe być określony rekurencją. Przykład: sortowanie przez scalanie: T(n) = Θ(1) (dla n = 1) T(n) = 2 T(n/2) + Θ(n) (dla n > 1) Rozwiązanie: T(n) = Θ(n log 2 n) Metody rozwiązywania rekurencji: metoda podstawienia metoda iteracyjna metoda rekurencji uniwersalnej 1

Szczegóły techniczne zakładamy często, Ŝe argumentami funkcji są liczby całkowite Przykład: ściśle powinniśmy zapisać dla sortowania przez scalanie: T(n) = Θ(1) (dla n = 1) T(n) = T( n/2 ) + T( n/2 ) + Θ(n) (dla n > 1) pomijamy szczegółowe warunki brzegowe Przykład: piszemy, Ŝe T(n) = 2 T(n/2) + Θ(n) bez dokładnego podawania wartości dla małych n. 2

Metoda podstawienia odgadujemy postać rozwiązania wykazujemy słuszność rozwiązania przez indukcję Przykład: obliczyć górne ograniczenie funkcji zadanej następującą zaleŝnością rekurencyjną: T(n) = 2T( n/2 ) + n. 1. Odgadujemy rozwiązanie: T(n) = O(n log n). 2. Musimy udowodnić, Ŝe T(n) c n log n dla pewnej stałej c i n > n 0. Przyjmujemy załoŝenie, Ŝe ograniczenie zachodzi dla n/2, tzn. Ŝe zachodzi T( n/2 ) c n/2 log n/2. 3

Podstawiamy do równania rekurencyjnego: T(n) 2 c n/2 log n/2 + n c n log n/2 + n = c n log n - c n log 2 + n = c n log n - c n + n (niech c 1) c n log n Sprawdzamy dla n = 2: T(2) = 4 c 2 log 2 n = 3: T(3) = 5 c 3 log 3 Dla c 2 warunki powyŝsze są spełnione. (warunek dla n = 1: T(1) c 1 log 1 = 0 nierówność nie jest spełniona, ale nam wystarczy wykazać Ŝe jest spełniona dla wszystkich n > n 0 ). 4

Odgadywanie rozwiązania: podstawiamy postać rozwiązania podobną do rozwiązania juŝ znanej rekurencji. Przykład: T(n) = 2T( n/2 + 17) + n. Dla duŝych n, róŝnica między T( n/2 + 17) a T( n/2 ) nie jest duŝa: obydwie rekurencje dzielą się prawie równo na połowy. Zgadujemy więc, Ŝe rozwiązanie wynosi T(n) = O(n log n), co moŝna udowodnić korzystając np. z metody podstawiania. Inny sposób: szacujemy zgrubnie górne i dolne oszacowanie (np. T(n) = Ω(n) oraz T(n) = O(n 2 )), stopniowo poprawiając dolne i górne oszacowanie, aŝ dojdziemy do otrzymania rozwiązania dokładnego. 5

Metoda iteracyjna Idea: rozwijanie (iterowanie) rekurencji i wyraŝenie jej jako sumy składników zaleŝnych tylko od n oraz warunków brzegowych. Przykład: T(n) = 3T( n/4 ) + n. Iterujemy: T(n) = n + 3T( n/4 ) = = n + 3( n/4 + 3T( n/16 )) = = n + 3( n/4 + 3( n/16 + 3T( n/64 ))) = = n + 3 n/4 + 9 n/16 + 27T( n/64 ) = i-ty składnik ciągu: 3 i n/4 i. Iterowanie kończymy, gdy n = 1 lub n/4 i = 1 (równowaŝnie: gdy i przekracza log 4 n). 6

Stwierdzamy, Ŝe suma odpowiada malejącemu szeregowi geometrycznemu: T(n) n + 3n/4 + 9n/16 + 27n/64 +... + 3 log 4n Θ(1) n 3 i = 0 4 i Skorzystaliśmy z własności: a) n/a /b = n/ab b) 3 log 4n = n log 3 4 c) log 4 3 < 1 + n log 43 Θ(1) = 4n + o(n) = O(n) 7

Drzewa rekursji ilustracja rozwijania rekurencji T(n) = 2T(n/2) + n 2 8

9

T(n) = T(n/3) + T(2n/3) + n 10

Metoda rekurencji uniwersalnej Metoda pozwala rozwiązać równanie rekurencyjne postaci T(n) = at(n/b) + f(n), gdzie a 1 i b 1 są stałymi, a f(n) jest funkcją asymptotycznie dodatnią. (dzielimy problem rozmiaru n na a podproblemów, kaŝdy rozmiaru n/b, gdzie a i b są dodatnimi stałymi. Koszt dzielenia problemu oraz łączenia rezultatów częściowych jest opisany funkcją f(n) ). 11

Twierdzenie o rekurencji uniwersalnej Niech a 1 i b 1 będą stałymi, f(n) pewną funkcją i niech T(n) będzie zdefiniowane dla nieujemnych liczb całkowitych przez rekurencję T(n) = at(n/b) + f(n), gdzie n/b oznacza n/b lub n/b. Wtedy funkcja T(n) moŝe być ograniczona asymptotycznie w następujący sposób: 1. Jeśli f(n) = O(n log b a-ε ) dla pewnej stałej ε > 0, to T(n) = Θ(n log b a ). 2. Jeśli f(n) = Θ(n log b a ), to T(n) = Θ(n log b a log n). 3. Jeśli f(n) = Ω(n log b a+ε ) dla pewnej stałej ε > 0 i jeśli a f(n/b) c f(n) dla pewnej stałej c > 1 i wszystkich dostatecznie duzych n, to T(n) = Θ(f(n)). Uwagi: Warunek 1. mówi, Ŝe funkcja n log b a musi być wielomianowo większa od f(n). Warunek 3. mówi, Ŝe funkcja n log b a musi być wielomianowo mniejsza od f(n). Warunek 3. mówi, Ŝe funkcje n log b a i f(n) muszą być tego samego rzędu, przy dodatkowym warunku regularności. 12

Przykład: T(n) = 9T(n/3) + n a = 9, b = 3, f(n) = n. Liczymy n log ba = n log 39 = Θ(n 2 ). PoniewaŜ f(n) = O(n log 9-ε 3 ) gdzie np. ε = 1, moŝemy zastosować przypadek 1 z twierdzenia. Zatem T(n) = Θ(n 2 ). Przykład: T(n) = T(2n/3) + 1 a = 1, b = 3/2, f(n) = 1. Liczymy n log ba = n log 3/21 = n 0 = 1. PoniewaŜ f(n) = Θ(n log ba ) = 1, to stosujemy przypadek 2. Zatem T(n) = Θ(log n). Przykład: T(n) = 3T(n/4) + n log n a = 3, b = 4, f(n) = n log n. Liczymy n log ba = n log 43 = O(n 0.793 ). PoniewaŜ f(n) = Ω(n log 3+ε 4 ) gdzie ε 0.2, to moŝemy zastosować przypadek 3, o ile zachodzi warunek regularności dla dostatecznie duŝych n: a f(n/b) = 3 n/4 log n/4 3/4 n log n = c f(n) dla c = 3/4. Zatem T(n) = Θ(n log n). 13

------------------------------ Generowanie podciągów Problem Na wejściu znajdują się dwie liczby całkowite m i n, gdzie m <= n. Wynikiem jest posortowana lista m losowych liczb całkowitych z przedziału 1... n, wśród których Ŝadna nie powtarza się dwukrotnie. Algorytm nr 1 zwykłe wybieranie Generujemy m liczb pseudolosowych z przedziału 1... n. Po kaŝdym losowaniu sprawdzamy, czy liczba się nie powtórzyła; w takim przypadku powtarzamy losowanie. Wylosowane liczby sortujemy wybraną metodą. Zalety: prosty, intuicyjny Wady: nieefektywny (szczególnie dla m n), konieczność sortowania wyników 14

Algorytm nr 2 test losowy Algorytm analizuje kolejno liczby całkowite 1, 2,..., n i na podstawie odpowiedniego testu losowego decyduje, czy wybrać, czy teŝ odrzucić kaŝdą z nich. Oglądając liczby po kolei mamy pewność, Ŝe w wyniku otrzymamy ciąg posortowany. RozwaŜmy przykład, w którym m = 2 i n = 5. Powinniśmy wybrać liczbę 1 z prawdopodobieństwem 2/5; program powinien realizować to zadanie za pomocą instrukcji w rodzaju if RandReal(0,1) < 2/5 then... Niestety, nie moŝemy wybrać liczby 2 z tym samym prawdopodobieństwem: w wyniku takiego postępowania nie mielibyśmy pewności, Ŝe otrzymamy dokładnie 2 liczby spośród 5. Tak więc na następnej decyzji zawaŝy poprzedni wybór i decyzję na temat liczby 2 podejmiemy z prawdopodobieństwem 1/4, jeśli jedynka została wybrana i 2/4, jeśli wybrana nie została. Ogólnie, aby wylosować w liczb spośród p pozostałych, będziemy następną liczbę wybierać z prawdopodobieństwem w/p. 15

Zalety: oparty na solidnych podstawach matematycznych, wynik od razu posortowany Wady: nieefektywny dla m «n Algorytm nr 3 przemieszanie Umieszczamy liczby z przedziału 1... n w n-elementowej tablicy T. Następnie mieszamy (czyli zamieniamy) pierwszych m elementów tablicy T z elementami 1... n tej samej tablicy (oczywiście, w szczególnym przypadku taka zamiana moŝe nie nastąpić, gdy chcąc przemieszać i-tą liczbę wylosujemy właśnie liczbę i). Wynikiem (po posortowaniu) jest tablica złoŝona z pierwszych m przemieszanych elementów z tablicy T. Zalety: szybki (szczególnie dla m «n) Wady: wymaga uŝycia sortowania oraz pomocniczej tablicy 16