Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

ITERACJA - powtórzenie Dopóki g, wykonuj S Rozważmy pętle,,dopóki: Oznacza to: (*) Sprawdź, czy warunek g jest prawdziwy. Jeżeli warunek g jest prawdziwy,

Podobne prezentacje


Prezentacja na temat: "ITERACJA - powtórzenie Dopóki g, wykonuj S Rozważmy pętle,,dopóki: Oznacza to: (*) Sprawdź, czy warunek g jest prawdziwy. Jeżeli warunek g jest prawdziwy,"— Zapis prezentacji:

1 ITERACJA - powtórzenie Dopóki g, wykonuj S Rozważmy pętle,,dopóki: Oznacza to: (*) Sprawdź, czy warunek g jest prawdziwy. Jeżeli warunek g jest prawdziwy, to wykonaj to wszystko co mówi S, a następnie wróć do (*). W przeciwnym przypadku pomiń S i przejdź dalej do tego co występuje za pętlą w głownym programie. g - warunek dozoru pętli, S – treść pętli. Wykonanie kroków S nazywamy przebiegiem pętli lub iteracją.

2 REKURENCJA Rekursja albo rekurencja (ang. recursion, z łac. recurrere, przybiec z powrotem) to w logice, programowaniu i w matematyce odwoływanie się (np. procedury lub definicji) do samej siebie. Można powiedzieć, że obiekt jest rekurencyjny jeżeli częściowo składa się z siebie samego lub jego definicja odwołuje się do jego samego.

3 W logice wnioskowanie rekurencyjne opiera się na założeniu istnienia pewnego stanu początkowego oraz zdania (lub zdań) stanowiącego podstawę wnioskowania. Istotą rekurencji jest tożsamość dziedziny i przeciwdziedziny reguły wnioskowania, wskutek czego wynik wnioskowania może podlegać tej samej regule zastosowanej ponownie. Stan początkowy Podstawa wnioskowania Wniosek Podstawa wnioskowania

4 Przykład: reguła: każdy ojciec jest starszy od swojego syna; każdy ojciec jest czyimś synem stan początkowy: jestem 22-letnim mężczyzną teza: ojciec ojca mojego ojca jest starszy ode mnie dowód: mój ojciec jest starszy ode mnie mój ojciec jest czyimś synem ojciec mojego ojca jest starszy od mojego ojca ojciec mojego ojca jest czyimś synem itd..

5 W praktyce często spotykamy się z definicją rekursyjną (rekursywną), która polega na wstępnym określeniu szczególnego podzbioru definiowanych obiektów (P), a obiektów pozostałych, w stosunku do obiektów zdefiniowanych wcześniej (R). Rekurencja może prowadzić do powstania bardzo ciekawych obiektów! Przykład Definicja liczb naturalnych: (P) 1 jest liczbą naturalną. (R) następnik liczby naturalnej jest liczbą naturalną.

6 Żółw reaguje na polecenia: naprzód do.tyłu w.prawo w.lewo

7 spirala(bok,kąt,przyrost,warunek) naprzód bok w.prawo kąt if(kąt

8 spirala(bok,kąt,przyrost,warunek) naprzód bok w.prawo kąt if(kąt

9 spirala(bok,kąt,przyrost,warunek) naprzód bok w.prawo kąt if(kąt

10 spirala(bok,kąt,warunek) naprzód bok w.prawo kąt jeżeli(bok

11 spirala(bok,kąt,warunek) naprzód bok w.prawo kąt jeżeli(bok

12 spirala(bok,kąt,warunek) naprzód bok w.prawo kąt jeżeli(bok

13 c(wielkość,stopień) jeżeli(stipień=0) naprzód wielkość zwróć C(wielkość,stopień-1) w.prawo 90 C(wielkość,stopień-1) w.lewo 90

14 c(wielkość,stopień) jeżeli(stipień=0) naprzód wielkość zwróć C(wielkość,stopień-1) w.prawo 90 C(wielkość,stopień-1) w.lewo 90

15 c(wielkość,stopień) jeżeli(stipień=0) naprzód wielkość zwróć C(wielkość,stopień-1) w.prawo 90 C(wielkość,stopień-1) w.lewo 90

16 Łączymy 4 Krzywa Hilberta (krzywa wypełniająca przestrzeń) Łączymy Łączymy 4

17 Otrzymujemy Jaki jest algorytm rysowania krzywej Hilberta?

18 Wieże Hanoi Zadanie polega na przeniesieniu wieży na inny pal, z zachowaniem następujących reguł: jednorazowo można przenosić tylko jeden krążek dopuszczalne jest umieszczanie tylko mniejszego krążka na większym

19 Legenda mówi, że mnisi w pewnym klasztorze buddyjskim bez wytchnienia układają wieżę z 64 krążków. Kiedy skończą nastąpi koniec świata. Kiedy nastąpi koniec świata według legendy?

20 Dane są trzy paliki: A, B i C. Na jeden z nich, np. na A nałożono krążki o różnych średnicach, tak że krążek mniejszy nie leży pod większym. Paliki B i C sa puste. Należy przenieść wszystkie krążki z pala A na B. Można używać C jako pomocnicze miejsce przechowywania. Nie można kłaść krążków większych na mniejsze.

21 Oznaczmy paliki przez A, B i C. Niech n oznacza liczbę krążków. Ponumerujmy krążki od najmniejszego u góry do najmniejszego u dołu. W celu przeniesienia krążków z A do B należy: Przenieś (n-1) górnych krążków z palika źródłowego na palik pośredni. przenieś n-ty krążek na palik docelowy przenieś (n-1) górnych krążków z palika pośredniego na palik docelowy.

22 Chcemy przenieść 3 krążki z palika A na palik B. Przenieś 2 górne krążki z palika A na palik C. Przenieś 3-ci krążek na palik B Przenieś 2 górne krążki z palika C na palik B. Przenieś 1 górny krążek z palika A na palik B. Przenieś 2-gi krążek na palik C Przenieś 1 górny krążek z palika B na palik C.

23 Przenieś 1 górny krążek z palika A na palik B. Przenieś 2-gi krążek na palik C Przenieś 1 górny krążek z palika B na palik C.

24 Przenieś 2 górne krążki z palika A na palik C. Przenieś 3-ci krążek na palik B Przenieś 2 górne krążki z palika C na palik B.

25 Przenieś 1 górny krążek z palika C na palik A. Przenieś 3-ci krążek na palik B Przenieś 2 górne krążki z palika C na palik B.

26 Oznaczmy przez X Y czynność przenoszenia krążka z położenia X do położenia Y. Zadanie, które wykonaliśmy można zapisać następująco: A B A C B C A B C A C B A B Dane wejściowe do algorytmu to liczba krążków n, a danymi wyjściowymi jest lista ruchów X Y, które należy wykonać aby rozwiązać zadanie. Lista ruchów dla n=3 wygląda tak jak powyżej.

27 Stos - liniowa struktura danych. Dane dokładane są na wierzch stosu, również z wierzchołka są ściągane (stosuje się też określenie LIFO (ang. Last In First Out), oddające tę samą zasadę). Przykład: stos książek Przeciwieństwem stosu LIFO jest kolejka, bufor typu FIFO (ang. First In, First Out) Operacje, jakie można wykonywać na stosie: PUSH - czyli odłożenie obiektu na stos; rozmiar stosu zwiększa się o 1. Jeżeli przekroczony zostaje maksymalny rozmiar stosu następuje jego przepełnienie (ang. stack overflow). POP - ściągnięcie obiektu ze stosu; może doprowadzić do niedopełnienia stosu (ang. stack underflow).

28 Definicje rekurencyjne ciągów Mówimy, że ciąg jest zdefiniowany rekurencyjnie, jeżeli: (P) Określony jest pewien skończony zbiór wyrazów ciągu, zazwyczaj kilka pierwszych lub pierwszy wyraz. (R) Pozostałe wyrazy ciągu są zdefiniowane za pomocą poprzednich wyrazów ciągu.

29 Przykład: Ciąg 0, 0, 1, 1, 2, 2, 3, 3,.... można zdefiniować następująco: (P) CIĄG(0)=CIĄG(1)=0 (R) CIĄG(n)=1+CIĄG(n-2) dla n>=2 int ciag(int n) { if(n<2) return 0; else return 1+ciag(n-2); } Rekurencja

30 Przykład: Silnia (P) SILNIA(0)=1 (R) SILNIA(n)=SILNIA(n-1)*n dla n>0 1, 1, 2, 6, 24, 120, Iteracja Rekurencja int silnia(int n) { if (n =< 1) return 1; else return n*silnia(n-1); } int silnia(int n) { if (n =< 1) return 1; else { int silnia=1; for(int i=2;i<=n;i++) { silnia=silnia*i; } return silnia; }

31 Przykład: Ciąg Fibonacciego (P) FIB(0)=0, FIB(1)=1 (R) FIB(n)=FIB(n-1)+FIB(n-2) dla n>1 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, int fib(int n) { if(n<2) return n; else return fib(n-1)+fib(n-2); } Czy to jest dobre rozwiązanie? Rekurencja

32 Obliczenie wartości FIB(n) za pomocą wywołania funkcji fib(int n) powoduje jej uaktywnienie. Jak często? Zauważmy, że każde wywołanie z n>1 powoduje dwa dalsze wywołania fib(n-1) oraz fib(n-2) Obliczenia są nieefektywne bo funkcja fib(int n) jest wywolywana 25 razy dla obliczenia 7-go elementu.

33 Czy można policzyć to prościej? int fib(int n) { if(n<2) return n; else { int z,x=1,y=0; for(int i=0;i

34 Czas działania algorytmów Niech f i g będą ciągami liczb rzeczywistych. Piszemy f(n)=O(g(n)) (czytamy f(n) jest O od g(n)) wtedy gdy istnieje stała dodatnia taka, że |f(n)|<=C|g(n)| (dla pewnej liczby małych wartości n nierówność ta nie musi być spełniona – zależy nam na dużych wartościach n) Twierdzenie Każdy z powyższych ciągów jest O od wszystkich ciągów na prawo od niego.

35 Z poniższej tabeli widać, że algorytm rekurencyjny jest typu O(2 n ). Algorytm iteracyjny jest typu O(n). n Przypisania Algorytm iteracyjnyAlgorytm rekurencyjny


Pobierz ppt "ITERACJA - powtórzenie Dopóki g, wykonuj S Rozważmy pętle,,dopóki: Oznacza to: (*) Sprawdź, czy warunek g jest prawdziwy. Jeżeli warunek g jest prawdziwy,"

Podobne prezentacje


Reklamy Google