Matematyka Dyskretna. Andrzej Szepietowski. 25 czerwca 2002 roku

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

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:

TEORETYCZNE PODSTAWY INFORMATYKI

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

FUNKCJA REKURENCYJNA. function s(n:integer):integer; begin if (n>1) then s:=n*s(n-1); else s:=1; end;

Strategia "dziel i zwyciężaj"

Wstęp do programowania

Podstawy programowania. Wykład: 13. Rekurencja. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy programowania 2. Temat: Funkcje i procedury rekurencyjne. Przygotował: mgr inż. Tomasz Michno

Zaawansowane algorytmy i struktury danych

Rekurencja (rekursja)

Matematyka Dyskretna. Andrzej Szepietowski. 25 czerwca 2002 roku

Rekurencja. Przygotowała: Agnieszka Reiter

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

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

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

Teoria liczb. Magdalena Lemańska. Magdalena Lemańska,

0.1 Sposȯb rozk ladu liczb na czynniki pierwsze

Matematyka Dyskretna. Andrzej Szepietowski. 25 czerwca 2002 roku

Algorytmy w teorii liczb

Liczba 2, to jest jedyna najmniejsza liczba parzysta i pierwsza. Oś liczbowa. Liczba 1, to nie jest liczba pierwsza

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

Metoda Simplex bez użycia tabel simplex 29 kwietnia 2010

Matematyka Dyskretna. Andrzej Szepietowski. 25 czerwca 2002 roku

Wykład 8. Rekurencja. Iterować jest rzeczą ludzką, wykonywać rekursywnie boską. L. Peter Deutsch

Sortowanie przez scalanie

Algorytmy. wer Wojciech Myszka 30 listopada 2008

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

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

Matematyka dyskretna dla informatyków

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 i Struktury Danych.

Pierwsze kolokwium z Matematyki I 4. listopada 2013 r. J. de Lucas

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

Sortowanie danych. Jolanta Bachan. Podstawy programowania

Matematyka Dyskretna. Andrzej Szepietowski. 25 czerwca 2002 roku

Matematyka Dyskretna. Andrzej Szepietowski. 25 czerwca 2002 roku

ALGORYTMY MATEMATYCZNE Ćwiczenie 1 Na podstawie schematu blokowego pewnego algorytmu (rys 1), napisz listę kroków tego algorytmu:

Matematyka dyskretna Oznaczenia

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

Technologie informacyjne Wykład VII-IX

Algorytmy i Struktury Danych

Instrukcje pętli przykłady. Odgadywanie hasła. 1) Program pyta o hasło i podaje adres, gdy hasło poprawne lub komunikat o błędnym haśle.

5. Rekurencja. Przykłady

Algorytm - pojęcie algorytmu, sposób zapisu, poziom szczegółowości, czynności proste i strukturalne. Pojęcie procedury i funkcji.

Matematyczne Podstawy Informatyki

Raport z projektu. Przedmiot: Algorytmy i struktury danych 1 Projekt: Wieża Hanoi Autor: Wojciech Topolski

UNIWERSYTET GDAŃSKI MATERIAŁY DYDAKTYCZNE DO PRZEDMIOTU MATEMATYKA DYSKRETNA. pod redakcją: Hanna Furmańczyk Karol Horodecki Paweł Żyliński

Metody algortmiczne (Algorytmy Część IV)

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

Analiza algorytmów zadania podstawowe

Zaawansowane algorytmy i struktury danych

Matematyka dyskretna. Andrzej Łachwa, UJ, /10

Matematyka dyskretna. Andrzej Łachwa, UJ, /14

Algorytmy i Struktury Danych, 2. ćwiczenia

O rekurencji i nie tylko

Algorytmy i struktury danych. Wykład 4

Pierwiastki arytmetyczne n a

Definicja. Ciąg wejściowy: Funkcja uporządkowująca: Sortowanie polega na: a 1, a 2,, a n-1, a n. f(a 1 ) f(a 2 ) f(a n )

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

Wstęp do Informatyki

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 9 Rekurencja

Niech X bȩdzie dowolnym zbiorem. Dobry porz adek to relacja P X X (bȩdziemy pisać x y zamiast x, y P ) o w lasnościach:

Sterowalność liniowych uk ladów sterowania

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

Podstawy Informatyki. Sprawność algorytmów

1.1. Uzupełnij poniższą tabelę: i wynik(i)

Analiza algorytmów zadania podstawowe

Rekurencja. Matematyka dyskretna

Przykładowe zadania z teorii liczb

Podstawy Programowania semestr drugi. Wykład dziewiąty

MATEMATYKA W SZKOLE HELIANTUS LICZBY NATURALNE I CA LKOWITE

Złożoność obliczeniowa zadania, zestaw 2

5. Podstawowe algorytmy i ich cechy.

Programowanie w VB Proste algorytmy sortowania

Liczby naturalne i ca lkowite

TEORETYCZNE PODSTAWY INFORMATYKI

Laboratorium nr 1. i 2.

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

Wykład 4: Iteracja, indukcja i rekurencja

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

Matematyka Dyskretna. Andrzej Szepietowski. 25 czerwca 2002 roku

MATEMATYKA DZIELENIE LICZB Z RESZTA CECHY PODZIELNOṠCI

Równoleg le sortowanie przez scalanie

Zadania do samodzielnego rozwiązania

Efektywna metoda sortowania sortowanie przez scalanie

1. Wykład NWD, NWW i algorytm Euklidesa.

CIĄGI wiadomości podstawowe

12. Rekurencja. UWAGA Trzeba bardzo dokładnie ustalić <warunek>, żeby mieć pewność, że ciąg wywołań się zakończy.

TEORETYCZNE PODSTAWY INFORMATYKI

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

2. Liczby pierwsze i złożone, jednoznaczność rozkładu na czynniki pierwsze, największy wspólny dzielnik, najmniejsza wspólna wielokrotność.

Wieczorowe Studia Licencjackie Wrocław, Wykład nr 6 (w oparciu o notatki K. Lorysia, z modyfikacjami) Sito Eratostenesa

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

Obóz Naukowy Olimpiady Matematycznej Gimnazjalistów

Podstawy programowania. Podstawy C# Przykłady algorytmów

Rekurencja/rekursja. Iluzja istnienia wielu kopii tego samego algorytmu (aktywacji) Tylko jedna aktywacja jest aktywna w danej chwili

Równania różniczkowe cz astkowe rzȩdu pierwszego

Technologie Informatyczne Wykład VII

Transkrypt:

Matematyka Dyskretna Andrzej Szepietowski 25 czerwca 2002 roku

Rozdział 1 Rekurencja 11 Wieże Hanoi Rekurencja jest to zdolność podprogramu (procedury lub funkcji) do wywoływania samego siebie Zacznijmy od przykładu wież Hanoi Przypuśćmy, że mamy trzy wieże lub trzy paliki:, i Na pierwszym paliku,, znajduj a siȩ trzy kr ażki różnej wielkości, nanizane w porz adku od najwiȩkszego na dole do najmniejszego na górze Paliki i s a na pocz atku puste Należy przenieść wszystkie kr ażki z palika w razie potrzeby palikiem, według nastȩpuj acych reguł: można przenosić po jednym kr ażku z jednego palika na inny, nie można umieszczać wiȩkszego kr ażka na mniejszym na, posługuj ac siȩ Rozwi azaniem tej łamigłówki dla trzech kr ażków jest nastȩpuj acy ci ag siedmiu przełożeń: oznacza przeniesienie szczytowego kr ażka z palika na palik gdzie zapis Chodzi nam teraz o algorytm, który dla dowolnej liczby operacji potrzebnych do przełożenia kr ażków z palika na palik Algorytm przekładania kr ażków jeżeli, to przekładamy ten jeden kr ażek jeżeli, to: przekładamy kr ażków z razie potrzeby palikiem ), przekładamy -ty kr ażek z na, przekładamy kr ażków z na (za pomoc a palika ) 3, kr ażków wypisze ci ag na pomocniczy palik (posługuj ac siȩ w

4 Rozdział 1 Rekurencja Nietrudno zauważyć, że jeżeli proces przekładania kr ażków jest prawidłowy, to cały proces też jest prawidłowy, ponieważ obecność najwiȩkszego kr ażka na dole palika nie przeszkadza w przekładaniu mniejszych kr ażków Powyższy algorytm opiszmy teraz za pomoc a rekurencyjnej procedury przenieś, która odwołuje siȩ sama do siebie i wypisuje ci ag instrukcji przeniesienia kr ażków z palika na palik procedura przenieś( kr ażków z na, za pomoc a ): jeżeli, to wypisz, jeżeli, to przenieś( kr ażków z na, za pomoc a ), wypisz, przenieś( kr ażków z na, za pomoc a ) Rysunek 11: Schemat działania procedury przenieś dla wież Hanoi z trzema kr ażkami Na rysunku 81 zilustrowano działanie procedury przenieś dla Skrót oznacza wywołanie procedury przenieś( kr ażków z na, za pomoc a ) Strzałki w dół oznaczaj a wywołanie procedury, strzałki w górȩ powroty po wykonaniu procedury, a strzałki poziome odpowiadaj a nastȩpstwu instrukcji w ramach jednego wykonania procedury

12 Algorytm Euklidesa, wersja rekurencyjna 5 12 Algorytm Euklidesa, wersja rekurencyjna Innym przykładem algorytmu rekurencyjnego może być rekurencyjna wersja algorytmu Euklidesa, który oblicza najwiȩkszy wspólny dzielnik dwóch dodatnich liczb naturalnych i : fun kcja NWD(a,b): jeżeli, to jeżeli, to jeżeli, to,, W jȩzyku Pascal powyższ a procedurȩ możemy zapisać w nastȩpuj acy sposób: function NWD(a,b:integer):integer; begin end; if a=b then NWD:=a else if then NWD:=NWD(a-b,b) else NWD:=NWD(a,b-a) Rysunek 12: Schemat działania rekurencyjnej wersji algorytmu Euklidesa NWD(5,3):=1 NWD(2,3):=1 NWD(2,1):=1 NWD(1,1):=1 Na rysunku 82 przedstawiono proces obliczania funkcji NWD(7,3) 13 Funkcje rekurencyjne Czasami wygodnie jest zdefiniować funkcje za pomoc a wzoru rekurencyjnego Na przykład funkcjȩ silnia definiuje siȩ zwykle za pomoc a nastȩpuj acych dwóch równań: "

6 Rozdział 1 Rekurencja Podobnie można definiować inne funkcje ze zbioru liczb naturalnych w zbiór liczb naturalnych Definicja taka zawiera przepis, jak policzyć wartość funkcji dla wartości pocz atkowych, oraz drugi przepis, jak wyliczyć wartość dla argumentu za pomoc a wartości funkcji dla mniejszych argumentów 14 Funkcja (ci ag) Fibonacciego Nastȩpnym przykładem rekurencyjnego definiowania funkcji jest funkcja Fibonacciego, określona równaniami: Kolejne wartości funkcji Fibonacciego to: Udowodnimy teraz przez indukcjȩ, że (11) gdzie " oraz " Równość (11) zachodzi dla i Załóżmy teraz, że zachodzi dla wszystkich argumentów mniejszych od Zauważmy, że oraz s a rozwi azaniami równania, mamy wiȩc oraz a także oraz Łatwo teraz można pokazać, że Ponieważ, mamy, wiȩc wartość jest równa po zaokr agleniu do najbliższej liczby naturalnej i funkcja Fibonacciego rośnie wykładniczo 15 Funkcja Ackermanna, nastȩpuj acymi rów- Funkcja Ackermanna określona jest, dla liczb naturalnych #" naniami: &% $" #" $" $" " Funkcja Ackermanna jest przykładem funkcji maj acej dość prost a definicjȩ, ale jest praktycznie nieobliczalna z tego powodu, że jej wartości szybko rosn a Na przykład: ( ) +*, "

16 Algorytm sortowania przez scalanie 7 ) ) ) ) ) i ogólnie ) 16 Algorytm sortowania przez scalanie Zajmijmy siȩ teraz pewnym prostym rekurencyjnym algorytem sortowania ci agu Dla prostoty załóżmy, że długość ci agu jest potȩg a dwójki Algorytm sortowania jeżeli ci ag ma długość jeden, to jest już posortowany, jeżeli ci ag jest dłuższy, to: dzielimy go na połowy, sortujemy te połowy, ł aczymy posortowane połowy w jeden posortowany ci ag Istota pomysłu polega na tym, że można szybko poł aczyć dwa posortowane ci agi w jeden posortowany ci ag Algorytm ł aczenia wyjaśnijmy na przykładzie Przypuśćmy, że mamy dwa ci agi: jest pusty Ustawiamy dwa wskaźniki po jednym na pocz atku każdego ci agu (wskazane elementy bȩd a oznaczone daszkiem): i że chcemy je poł aczyć w posortowany ci ag Na pocz atku ci ag Porównujemy wskazane elementy Mniejszy z porównanych elementów przepisujemy na ci ag i przesuwamy wskaźnik w tym ci agu, z którego był wziȩty element do ci agu W wyniku otrzymamy: Powtarzamy ten proces tak długo, aż w jednym z ci agów ostatni element zostanie zabrany do ci agu

8 Rozdział 1 Rekurencja W takiej sytuacje pozostałe elementy tego drugiego ci agu przenosimy do ci agu : Liczba porównań potrzebna do scalenia ci agów nie jest wiȩksza od sumy długości tych ci agów Algorytm merge-sort (inaczej sortowanie przez scalanie), który sortuje ci ag, można rekurencyjnie opisać tak (rysunek 83): merge-sort(s): jeżeli ma tylko jeden element, to koniec, jeżeli ma wiȩcej elementów, to: dzielimy ci ag na połowy i merge-sort( ),, merge-sort( ł aczymy i ), Rysunek 13: Schemat działania algorytmu merge-sort dla ci agu 3, 7, 5, 2, 6, 1, 8, 4 3752 6186 37 52 61 84 3 7 5 2 6 1 8 4 3 7 5 2 6 1 8 4 37 25 16 48 2357 1468 12345678 Algorytm merge-sort jest przykładem algorytmu typu dziel i zwyciȩżaj, którego ogólny schemat wygl ada tak: jeżeli problem jest małego rozmiaru, to rozwi azujemy go bezpośrednio,

17 Rozwi azywanie równań i nierówności rekurencyjnych 9 jeżeli problem jest duży, to: dzielimy problem na podproblemy, rozwi azujemy podproblemy, ł aczymy rozwi azania podproblemów w rozwi azanie całego problemu 17 Rozwi azywanie równań i nierówności rekurencyjnych Oszacujmy teraz czas działania algorytmu sortowania przez scalanie Niech oznacza liczbȩ operacji porównania potrzebn a do posortowania ci agu długości Mamy nastȩpuj ace oszacowania: (12) (13) Druga zależność wynika st ad, że aby posortować ci ag długości, sortujemy dwa ci agi długości, a nastȩpnie potrzebujemy porównań, aby scalić te dwie połówki Dla prostoty rozważań zakładamy tutaj, że jest potȩg a dwójki, dka jakiegoś naturalnego Istnieje wiele sposobów wyliczania lub szacowania funkcji określonej rekurencyjnie Przedstawimy teraz dwa najprostsze z nich: metodȩ podstawiania i metodȩ iteracji 18 Metoda podstawiania W metodzie podstawiania odgadujemy rozwi azanie albo jego oszacowanie, a nstȩpnie pokazujemy, że jest ono poprawne Pokażemy działanie tej metody szacuj ac złożoność czasow a merge-sortu określon a rekurencj a (12)-(13) Zgadujemy, że dla jakiejś stałej i udowodnimy przez indukcjȩ, że powyższa nierówność zachodzi dla każdego potȩgi dwójki Zachodzi ona dla Zakładamy teraz, że i podstawiamy do nierówności (13) Ostatnia nierówność jest spełniona, jeżeli Metoda podstawiania została zastosowana w podrozdziale o funkcji Fibonacciego do pokazania, że (14)

10 Rozdział 1 Rekurencja ale tam odgadniȩto dokładne rozwi azanie Teraz pokażemy jak dojść do rozwi aznia zaczynaj ac od ogólniejszej postaci Zacznijmy od równania (15) Sprawdźmy, jakie funkcje postaci, spełniaj a to równanie Po podstawieniu do równania (15) mamy Po podzieleniu stromnami przez, otrzymamy " Jest to równanie kwadratowe z dwoma rozwi azaniami, czyli dwie funkcje oraz Zauważmy, że także każda funkcja postaci gdzie i oraz spełniaj a równanie (15) to stałe, spełnia równanie (15) Sprawdźmy teraz, dla jakich stałych i funkcja spełnia zależności Powyższy układ jest spełniony dla i Otrzymujemu układ równości Tak wiȩc otrzymujemy wzór na funkcjȩ Fibonacciego (16) 19 Metoda iteracyjna Moteda iteracyjna polega na rozwijaniu rekursji Jako pierwszy przykład rozważmy zależność Dla uproszczenia zakładamy, że jest potȩg a rozwijamy w nastȩpuj acy sposób:, dla jakiegoś naturalnego Funkcjȩ

) ) 110 Metoda rekurencji uniwersalnej 11,,,, Iteracjȩ powtarzamy, aż ostatni składnik bȩdzie zawierał Otrzymamy wtedy, Skorzystaliśmy tu z równości Jako drugi przykład rozważmy rekursjȩ oraz z faktu, że * Jak bȩdziemy j a rozwijać, to otrzymamy Dla Otrzymamy wtedy 110 Metoda rekurencji uniwersalnej, czyli gdy * i (17) Przypuśćmy, że mamy równanie rekurencyjne (18)

12 Rozdział 1 Rekurencja gdzie i Równanie takie otrzymamy szacuj ac czas działania algorytmu rekurencyjnego, który metod a "dziel i rz adź" dzieli problem na podproblemów rozmiaru Funkcja opisuje czas potrzebny na podzielenie problemu na podproblemy i na poł aczenie rozwi azań podproblemów w rozwi azanie całego problemu Na koniec podamy bez dowodu twierdzenie mówi ace jak można szacować funkcjȩ określon a równaniem (18) Twierdzenie 11 (o rekurencji uniwersalnej) Niech bȩdzie określone dla nieujemnych liczb całkowitych równaniem rekurencyjnym " gdzie, i " oznacza " lub Wtedy Jeżeli dla pewnej stałej, to Jeżeli, to Jeżeli dla pewnej stałej oraz pewnej stałej, to 111 Zadania 1 Napisz program, który rekurencyjnie oblicza: a) funkcjȩ silnia, b) funkcjȩ Fibonacciego, c) funkcjȩ wykładnicz a dla 2 Napisz program, który oblicza symbol Newtona: a) według wzoru rekurencyjnego b) według wzoru Porównaj te programy 3 Napisz program, który rekurencyjnie oblicza funkcjȩ: 4 Oblicz według rekurencyjnego algorytmu Euklidesa 5 Według algorytmu ł aczenia poł acz ci agi i

111 Zadania 13 6 Stosuj ac algorytm merge-sort posortuj ci ag słów: słowik, wróbel, kos, jaskółka, kogut, dziȩcioł, gil, kukułka, szczygieł, sowa, kruk, czubatka [Fragment wiersza Ptasie radio Juliana Tuwima] 7 Dana jest funkcja Oblicz : Co oblicza funkcja? 8 Dana jest funkcja Oblicz : Co oblicza funkcja? 9 Wypisz ci ag przełożeń potrzebnych do przeniesienia czterech kr ażków na wieżach Hanoi 10 Udowodnij, że algorytm opisany w podrozdziale 81 wymaga przełożeń do przeniesienia kr ażków "