Wstęp do programowania

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

Wstęp do programowania

Wstęp do programowania

Strategia "dziel i zwyciężaj"

Wstęp do programowania

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

Wstęp do programowania

Wstęp do programowania

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

Wstęp do programowania

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 9. Karol Tarnowski A-1 p.

Rekurencja. Przygotowała: Agnieszka Reiter

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

Zaawansowane algorytmy i struktury danych

Programowanie dynamiczne

Algorytmy i Struktury Danych.

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

Sortowanie danych. Jolanta Bachan. Podstawy programowania

Efektywna metoda sortowania sortowanie przez scalanie

Algorytmy i struktury danych. Co dziś? Tytułem przypomnienia metoda dziel i zwyciężaj. Wykład VIII Elementarne techniki algorytmiczne

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

Teoretyczne podstawy informatyki

Algorytmy i Struktury Danych

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

5. Podstawowe algorytmy i ich cechy.

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

Wstęp do programowania

Algorytmy i Struktury Danych, 2. ćwiczenia

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

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

Analiza algorytmów zadania podstawowe

ALGORYTMY I STRUKTURY DANYCH

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 )

Teoretyczne podstawy informatyki

Dzi kuj za uwag! Spotkania z Pythonem. Cz ± 1 - podstawy - rozwi zania zada« Michaª Alichniewicz. Gda«sk Studenckie Koªo Automatyków SKALP

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

Sortowanie przez scalanie

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

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

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

Algorytmy i Struktury Danych, 2. ćwiczenia

Wstęp do programowania

Matematyka Dyskretna. Andrzej Szepietowski. 25 czerwca 2002 roku

Podstawy algorytmiki i programowania - wykład 3 Funkcje rekurencyjne Wyszukiwanie liniowe i binarne w tablicy

Informatyka A. Algorytmy

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

5. Rekurencja. Przykłady

Algorytmy sortujące i wyszukujące

Wykład 4: Iteracja, indukcja i rekurencja

Technologie informacyjne Wykład VII-IX

Złożoność algorytmów. Wstęp do Informatyki

Sortowanie. LABORKA Piotr Ciskowski

Laboratorium nr 1. i 2.

Wstęp do programowania

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

TEORETYCZNE PODSTAWY INFORMATYKI

Wstęp do Programowania potok funkcyjny

Algorytmy i Struktury Danych. (c) Marcin Sydow. Sortowanie Selection Sort Insertion Sort Merge Sort. Sortowanie 1. Listy dowiązaniowe.

Programowanie proceduralne INP001210WL rok akademicki 2017/18 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Podstawowe algorytmy i ich implementacje w C. Wykład 9

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

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

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

Rekurencja (rekursja)

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

Analiza algorytmów zadania podstawowe

EGZAMIN MATURALNY W ROKU SZKOLNYM 2017/2018 INFORMATYKA

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

Zaawansowane algorytmy i struktury danych

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

Anatomia definicji rekursywnej. Anatomia definicji rekursywnej. int silnia(intn){ if(n==0) return 1; else return n*silnia(n-1); }

Wstęp do programowania

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

WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA

Wstęp do programowania

Algorytmy. wer Wojciech Myszka 30 listopada 2008

Wykład 5: Iteracja, indukcja i rekurencja Sortowanie

Laboratorium kryptograficzne dla licealistów 6

Podstawy Programowania semestr drugi. Wykład dziewiąty

Programowanie w VB Proste algorytmy sortowania

Testy jednostkowe Wybrane problemy testowania metod rekurencyjnych

Podstawy algorytmiki i programowania - wykład 6 Sortowanie- algorytmy

Matematyczne Podstawy Informatyki

TEORETYCZNE PODSTAWY INFORMATYKI

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

Wyszukiwanie w BST Minimalny i maksymalny klucz. Wyszukiwanie w BST Minimalny klucz. Wyszukiwanie w BST - minimalny klucz Wersja rekurencyjna

EGZAMIN - Wersja A. ALGORYTMY I STRUKTURY DANYCH Lisek89 opracowanie kartki od Pani dr E. Koszelew

Programowanie dynamiczne cz. 2

Techniki konstruowania algorytmów. Metoda dziel i zwyciężaj

Metody algortmiczne (Algorytmy Część IV)

Technologie Informatyczne Wykład VII

Algorytmy i struktury danych IS/IO, WIMiIP

Algorytmika w bioinformatyce

Podstawy Informatyki. Metalurgia, I rok. Rekurencja. skomplikowane zadanie. Rekurencja

Podstawy Informatyki. Metalurgia, I rok. Wykład 5 Rekurencja

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

Algorytmy i struktury danych.

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

. Podstawy Programowania 2. Drzewa bst - część druga. Arkadiusz Chrobot. 12 maja 2019

wykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis

Transkrypt:

Wstęp do programowania Rekurencja, metoda dziel i zwyciężaj Paweł Daniluk Wydział Fizyki Jesień 2014 P. Daniluk(Wydział Fizyki) WP w. VIII Jesień 2014 1 / 27

Rekurencja Recursion See Recursion. P. Daniluk(Wydział Fizyki) WP w. VIII Jesień 2014 2 / 27

Rekurencja Recursion If you still don t get it, see Recursion. P. Daniluk(Wydział Fizyki) WP w. VIII Jesień 2014 2 / 27

Silnia silnia(i) = n! = 1 2... n { 1 i = 1 silnia(i 1) i w p.p. P. Daniluk(Wydział Fizyki) WP w. VIII Jesień 2014 3 / 27

Silnia silnia(i) = Rozwiązanie rekurencyjne def s i l n i a ( n ) : i f n==1: return 1 e l s e : return n! = 1 2... n { 1 i = 1 silnia(i 1) i s i l n i a ( n 1) n w p.p. P. Daniluk(Wydział Fizyki) WP w. VIII Jesień 2014 4 / 27

Liczby Fibonacciego F 0 = 0 F 1 = 1 F n = F n 1 + F n 2 Rozwiązanie rekurencyjne def f i b ( n ) : i f n<2: return e l s e : return n f i b ( n 1)+ f i b ( n 2) P. Daniluk(Wydział Fizyki) WP w. VIII Jesień 2014 5 / 27

Wieże Hanoi Jak przenieść krążki z lewego stosu na prawy, jeżeli wolno je przenosić po jednym i nie wolno kłaść większego na mniejszym? P. Daniluk(Wydział Fizyki) WP w. VIII Jesień 2014 6 / 27

Wieże Hanoi Rozwiązanie def move ( n, f, t, h ) : i f n==1: move_one ( f, t ) e l s e : move ( n 1, f, h, t ) move_one ( f, t ) move ( n 1, h, t, f ) P. Daniluk(Wydział Fizyki) WP w. VIII Jesień 2014 7 / 27

Ile kosztuje rekurencja? Niech H n będzie liczbą przeniesień w przypadku z n krążkami. H n+1 = 2H n + 1 H 1 = 1 H 2 = 2H 1 + 1 = 3 H 3 = 7 H 4 = 15 P. Daniluk(Wydział Fizyki) WP w. VIII Jesień 2014 8 / 27

Ile kosztuje rekurencja? Niech H n będzie liczbą przeniesień w przypadku z n krążkami. H n+1 = 2H n + 1 H 1 = 1 H 2 = 2H 1 + 1 = 3 H 3 = 7 H 4 = 15 Lepiej się nie da. H n = 2 n 1 P. Daniluk(Wydział Fizyki) WP w. VIII Jesień 2014 8 / 27

Ile kosztuje rekurencja? Niech T n będzie liczbą dodawań potrzebnych do obliczenia fib(n). T n+1 = T n + T n 1 + 1 T 1,2,3,... = 0, 0, 1, 2, 4, 7, 12, 20, 33, 54, 87,... P. Daniluk(Wydział Fizyki) WP w. VIII Jesień 2014 9 / 27

Ile kosztuje rekurencja? Niech T n będzie liczbą dodawań potrzebnych do obliczenia fib(n). T n+1 = T n + T n 1 + 1 T 1,2,3,... = 0, 0, 1, 2, 4, 7, 12, 20, 33, 54, 87,... F 1,2,3,... = 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 88,... T n = F n 1 = ϕ = 1 + 5 2 ϕ n + 1 5 2 P. Daniluk(Wydział Fizyki) WP w. VIII Jesień 2014 9 / 27

Ile kosztuje rekurencja? Niech O n będzie liczbą dodawań potrzebnych do obliczenia F n metodą iteracyjną. Wiemy, że wystarczy dla F n wystarczy n 2 dodawań. O n = O n 1 + 1 P. Daniluk(Wydział Fizyki) WP w. VIII Jesień 2014 10 / 27

Czy można poprawić funkcję fib? Wystarczy zapamiętywać obliczone liczby. f i b _ l i s t =[0,1] def f i b ( n ) : i f len ( f i b _ l i s t )>n : return f i b _ l i s t [ n ] e l s e : r e s=f i b ( n 2)+ f i b ( n 1) f i b _ l i s t. append ( r e s ) return r e s P. Daniluk(Wydział Fizyki) WP w. VIII Jesień 2014 11 / 27

Rekurencja ogonowa Ostatnią operacją funkcji rekurencyjnej jest wywołanie samej siebie lub zwrócenie wyniku. Przykład def f ( i ) : k=foo ( i ) return f ( k ) albo def f ( i ) : k=foo ( i ) r e s=f ( k ) return r e s Tak nie def f ( i ) : k=foo ( i ) return f ( k)+1 P. Daniluk(Wydział Fizyki) WP w. VIII Jesień 2014 12 / 27

Rekurencja ogonowa Zwykła def s i l n i a ( n ) : i f n==1: return 1 return s i l n i a ( n 1) n Ogonowa def s i l ( n, acc ) : i f n==1: return acc return s i l ( n 1, n acc ) def s i l n i a ( n ) : return s i l ( n, 1) P. Daniluk(Wydział Fizyki) WP w. VIII Jesień 2014 13 / 27

Rekurencja ogonowa Zwykła Wywołaj silnia(3) Wywołaj silnia(2) Wywołaj silnia(1) Wywołaj silnia(0) Zwróć 1 Zwróć 1 Zwróć 2 Zwróć 6 Ogonowa Wywołaj silnia(3) Wywołaj sil(3,1) Zastąp argumenty (3,1) przez (2,3), skocz na początek sil Zastąp argumenty (2,3) przez (1,6), skocz na początek sil Zastąp argumenty (1,6) przez (0,6), skocz na początek sil Zwróć 6 jako wynik P. Daniluk(Wydział Fizyki) WP w. VIII Jesień 2014 14 / 27

Konwersja na pętlę Przed def f ( par, r e s ) : i f done ( par ) : return r e s par, r e s=one_step ( par, r e s ) f ( par, r e s ) Po def f ( par, r e s ) : while not done ( par ) : par, r e s=one_step ( par, r e s ) return r e s P. Daniluk(Wydział Fizyki) WP w. VIII Jesień 2014 15 / 27

Dziel i zwyciężaj 1 Podział problemu na 2 lub więcej części 2 Rozwiązanie każdej z części niezależnie 3 Scalenie rozwiązań części w rozwiązanie problemu pierwotnego Każdy z podproblemów rozwiązywany jest tą samą metodą. Naturalna implementacja przy pomocy rekurencji. Hanoi 1 Podział: Hanoi(n, f, t, h) Hanoi(n-1, f, h, t), Hanoi(n-1, h, t, f) 2 Scalenie: Hanoi(n-1, f, h, t), f t, Hanoi(n-1, h, t, f) P. Daniluk(Wydział Fizyki) WP w. VIII Jesień 2014 16 / 27

Mergesort Scalanie dwóch posortowanych list L 1, L 2 scalane listy L lista wynikowa 1 jeżeli L 1 i L 2 niepuste niech a i b będą odpowiednio pierwszymi elementami L 1 i L 2 jeżeli a b usuń a z L 1 i dopisz na koniec L jeżeli a > b usuń b z L2 i dopisz na koniec L skocz do 1 2 dopisz niepustą listę do L Scalenie list o łącznej długości N wymaga co najwyżej N 1 porównań i N przepisań. P. Daniluk(Wydział Fizyki) WP w. VIII Jesień 2014 17 / 27

Mergesort c.d. Sortowanie przez scalanie 1 podziel listę na dwie listy o równej długości 2 posortuj listy oddzielnie 3 scal posortowane listy Czas potrzebny na posortowanie listy długości N: T 1 = 0 T n = 2T n 2 + n P. Daniluk(Wydział Fizyki) WP w. VIII Jesień 2014 18 / 27

Mergesort c.d. Załóżmy, że n = 2 k : S k = T n S 0 = 0 S k = 2S k 1 + 2 k Ostatecznie: S k = k2 k T n = n log 2 n P. Daniluk(Wydział Fizyki) WP w. VIII Jesień 2014 19 / 27

Liczby Fibonacciego Łatwo zauważyć ( Fn+1 F n ) = ( ) ( ) 1 1 Fn 1 0 F n 1 ( Fn+1 F n F n F n 1 F n+m ) = ( 1 1 1 0 F n+m 1 ) ( ) Fn F n 1 = F n 1 F n 2 ( ) n 1 ( ) 1 1 F2 F = 1 = 1 0 F 1 F 0 ( ) ( ) ( ) Fn+m+1 F n+m Fn+1 F = n Fm+1 F m F n F n 1 F m F m 1 ( ) n 1 1 1 0 P. Daniluk(Wydział Fizyki) WP w. VIII Jesień 2014 20 / 27

Liczby Fibonacciego c.d. ( ) ( ) ( ) F2n+1 F 2n Fn+1 F = n Fn+1 F n F 2n F 2n 1 F n F n 1 Ostatecznie F 2n+1 = Fn+1 2 + Fn 2 F 2n = 2F n+1 F n Fn 2 F n F n 1 Algorytm obliczania F n 1 obliczyć F n 2 +1 i F n 2 2 zastosować wzory P. Daniluk(Wydział Fizyki) WP w. VIII Jesień 2014 21 / 27

Liczby Fibonacciego c.d. Czas obliczeń T 1 = 0 T 2n = T n + 1 T n = log 2 n P. Daniluk(Wydział Fizyki) WP w. VIII Jesień 2014 22 / 27

Zadanie 1 labirynt Labirynt jest zdefiniowany na prostokątnej planszy o rozmiarze n na m pól. Pole może być oznaczone jako korytarz lub ściana. Dozwolone jest przechodzenie pomiędzy mającymi wspólny bok polami korytarza. Napisz program rozstrzygający, czy w zadanym labiryncie istnieje droga pomiędzy wskazanymi polami. Wskazówka Labirynt w Pythonie można zaimplementować jako listę list. Np.: map= [ [ 0, 0, 1, 1, 1, 0, 0, 0 ], [ 1, 1, 1, 0, 1, 0, 1, 1 ], [ 0, 0, 0, 1, 1, 0, 1, 0 ], [ 0, 0, 0, 1, 1, 1, 1, 0 ] ] P. Daniluk(Wydział Fizyki) WP w. VIII Jesień 2014 23 / 27

Zadanie 2 wyszukiwanie binarne Zaimplementuj algorytm wyszukiwania binarnego w posortowanej liście z zastosowaniem rekurencji. P. Daniluk(Wydział Fizyki) WP w. VIII Jesień 2014 24 / 27

Zadanie 3 Quicksort Sortowanie szybkie polega na rozdzieleniu sortowanej listy na dwie: zawierającą elementy mniejsze od pewnego wybranego i zawierającą elementy pozostałe. Obie listy sortowane są niezależnie, a następnie następuje ich złączenie. Cały proces można (i należy) przeprowadzić w miejscu stosując do rozdzielania algorytm analogiczny do użytego w zadaniu o fladze polskiej. P. Daniluk(Wydział Fizyki) WP w. VIII Jesień 2014 25 / 27

Zadanie 4 wieże Hanoi z ograniczeniami Napisz program tworzący sekwencję ruchów w problemie wież Hanoi przy założeniu, że nie wszystkie ruchy są dozwolone. Przykładowo, jeżeli zakazany jest ruch z A na C, konieczne jest przenoszenie krążka z A na B, a następnie z B na C. P. Daniluk(Wydział Fizyki) WP w. VIII Jesień 2014 26 / 27

Strona wykładu http://bioexploratorium.pl/wiki/wstęp_do_programowania 2014z P. Daniluk(Wydział Fizyki) WP w. VIII Jesień 2014 27 / 27