Algorytmy i Struktury Danych.
|
|
- Nina Skrzypczak
- 6 lat temu
- Przeglądów:
Transkrypt
1 Algorytmy i Struktury Danych. Rekurencja dr hab. Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 3 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 1 / 61
2 Rekurencja I Rekurencja polega na rozwiazywaniu problemu w oparciu o rozwiazania tego samego problemu dla danych o mniejszych rozmiarach. W informatyce rekurencja jest technika programistyczna, polegajac a na wywoływaniu funkcji wewnatrz niej samej. Rekurencja jest jedna z najbardziej interesujacych technik programistycznych i to w dodatku technika zaskakujaco efektywna. Rekurencyjny opis obliczeń jest na ogół bardziej zwarty niż opis tych samych obliczeń bez użycia rekurencji. Taki opis jest stosowany np. przy opisie fraktali. Niektóre rozwiazania rekurencyjne moga być nieefektywne. W takich przypadkach można je zastapić rozwiazaniami wykorzystujacymi zwyczajna petle lub stos. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 2 / 61
3 Rekurencja II Funkcja rekurencyjna cyklicznie wywołuje sama siebie, za każdym razem przekazujac w wywołaniu inne argumenty. Przekazanie argumentu o pewnej wartości powoduje, że funkcja kończy działanie bez kolejnego wywołania samej siebie. Sytuacja ta jest nazywana przypadkiem bazowym. Gdy najbardziej wewnętrzne wywołanie funkcji zostaje zakończone, rozpoczyna się proces zakańczania kolejnych wywołań, który w końcu doprowadza do zakonczenia poczatkowego wywołania. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 3 / 61
4 Indukcja matematyczna Programowanie rekurencyjne jest bezpośrednio zwiazana z indukcja matematyczna - technika dowodzenia własności funkcji dyskretnych. Udowodnienie, że pewne twierdzenie odwołujace się do liczby całkowitej N jest prawdziwe dla nieskończenie wielu wartości N przy pomocy indukcji matematycznej składa się z dwóch etapów: Przypadek bazowy - udowadniamy, że twierdzenie jest prawdziwa dla jakiejś określonej wartości (zwykle 0 lub 1). Krok indukcyjny - główna częścia dowodu. Zazwyczaj zakładamy, że twierdzenie jest prawdziwe dla wszystkich liczb całkowitych dodatnich mniejszych niż N, a następnie wykorzystujac ten fakt, udowodniamy, że jest prawdziwe dla N. Taki dowód jest wystarczajacy, aby wykazać, że twierdzenie jest prawdziwe dla wszystkich N. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 4 / 61
5 Rozważane problemy rekurencyjne Funkcja silnia - Hello word dla rekurencji :) Algorytm Euklidesa Liczba trójkatna Potęgi liczby naturalnej a Ciag Fibonacciego Wieże Hanoi Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 5 / 61
6 Funkcja silnia n! = n Algorytm iteracyjny: Require: Liczba n 1: i = 1; 2: silnia = 1; 3: while i <= n do 4: silnia = silnia * i; 5: i= i+1; 6: end while 7: return silnia; Złożoność czasowa: Θ(n). long long factorial(int n) { if (n==0) return 1; int i = 1; long long s = 1; while (i <= n) s *= i++; return s; } Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 6 / 61
7 Funkcja silnia - wersja rekurencyjna silnia(n) = { 1 dla n = 0 Przypadek bazowy n silnia(n 1) dla n > 0 Krok redukcji Kod C++: long long silnia(int n) { if (n==0) return 1; return n*silnia(n-1); } Ślad obliczeń: silnia(4) silnia(3) silnia(2) silnia(1) silnia(0) return 1 return 1*1 = 1 return 2*1 = 2 return 3*2 = 6 return 4*6 = 24 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 7 / 61
8 Czasowa złożoność obliczeniowa T (n) - czas potrzebny do wykonania funkcji silnia (n) dla dowolnego wejścia o rozmiarze n. Przypadek bazowy: T (0) = 1 (jednostkowy czas pracy, gdy algorytm działa na wejściu wielkości 1); Krok indukcyjny: Dla wejścia o rozmiarze n, algorytm wykonuje pracę jednostkowa realizujac operacje porównania, mnożenia (tj. n silnia(n 1)) oraz zwrotu wartości, a następnie wywołuje sam siebie dla wejścia o rozmiarze n 1. Zatem otrzymujemy następujace równanie: T (n) = T (n 1) + 1 dla n > 0. Jeśli rozwiniemy rekurencję otrzymujemy: T (0) = 1, T (1) = T (0) + 1 = = 2 T (2) = T (1) + 1 = = 3, T (3) = T (2) + 1 = = 4 T (4) = T (3) + 1 = = 5,..., T (n) = n + 1 Zatem T (n) = Θ(n). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 8 / 61
9 Największy Wspólny Dzielnik - Algorytm Euklidesa Wejście: dwie liczby naturalne a, b. Wyjście: największy wspólny dzielnik liczb a i b. Rozwiazanie rekurencyjne: { NWD(a, b) = a dla b = 0 NWD(b, a mod b) dla b > 0 Euklides z Aleksandrii ok p.n.e. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 9 / 61
10 Największy Wspólny Dzielnik - kod C++ //wersja rekurencyjna long long NWD(int a, int b) { if (b==0) return a; else return NWD(b,a%b); } //wersja iteracyjna long long NWD2(int a, int b) { while (b!= 0) { int temp = b; b = a % b; a = temp; } return a; } Ślad obliczeń nwd(1440, 408) nwd(408, 216) nwd(216, 192) nwd(192, 24) nwd(24, 0) return 24 return 24 return 24 return 24 return 24 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 10 / 61
11 Złożoność czasowa NWD Twerdzenie: Gabriel Lamé, 1844 Dla n 1, niech u i v będa liczbami całkowitymi takimi, że u > v > 0 oraz algorytm euklidesa zastosowany do u i v wymaga dokładnie n dzieleń oraz u jest najmniejsza możliwa wartościa spełniajacych te warunki. Wówczas u = F(n + 2) oraz v = F(n + 1), gdzie F(k) jest liczba Fibonacciego a. Ponadto, liczba kroków algorytmu Euklidesa nie przekracza wartości 5 razy ilość cyfr w mniejszej liczbie. a (D. Knuth. The Art of Computer Programming, Tom. 2, Addison-Wesley, 1998., str. 343) Ograniczenie 5 może być dalej zmniejszone do ln(10)/lnφ, gdzie (φ = = ) jest złotym podziałem. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 11 / 61
12 Złożoność czasowa NWD Przykład: Niech a = 3 a b = 2. Algorytm NWD wykonał 2 obroty, aby obliczyć NWD z a i b: NWD(3, 2) = NWD(2, 1) = NWD(1, 0) = 1 Ograniczenie zgodne z Tw. Gabriel Lamé: 5 1 = 5 Ulepszone ograniczenie: 1 ln(10)/ln(1.62) = 4, 77 Przykład: Niech a = 8 a b = 5. Algorytm NWD wykonał 4 obroty, aby obliczyć NWD z a i b: NWD(8, 5) = NWD(5, 3) = NWD(3, 2) = NWD(2, 1) = NWD(1, 0) = 1 Ograniczenie zgodne z Tw. Gabriel Lamé: 5 1 = 5 Ulepszone ograniczenie: 1 ln(10)/ln(1.62) = 4, 77 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 12 / 61
13 Złożoność czasowa NWD Przykład: Niech a = 55 a b = 34. Algorytm NWD wykonał 8 obrotów, aby obliczyć NWD z a i b: NWD(55, 34) = NWD(34, 21) = NWD(21, 13) = NWD(13, 8) = NWD(8, 5) = NWD(5, 3) = NWD(3, 2) = NWD(2, 1) = NWD(1, 0) = 1 Ograniczenie zgodne z Tw. Gabriel Lamé: 5 2 = 10 Ulepszone ograniczenie: 2 ln(10)/ln(1.62) = 2 4, 77 = 9, 54 Niech a = 89 a b = 55. Algorytm NWD wykonał 9 obrotów, aby obliczyć NWD z a i b: NWD(89, 55) = NWD(55, 34) = NWD(34, 21) = NWD(21, 13) = NWD(13, 8) = NWD(8, 5) = NWD(5, 3) = NWD(3, 2) = NWD(2, 1) = NWD(1, 0) = 1. Ograniczenie zgodne z Tw. Gabriel Lamé: 5 2 = 10 Ulepszone ograniczenie: 2 ln(10)/ln(1.62) = 2 4, 77 = 9, 54 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 13 / 61
14 Złożoność czasowa NWD Przykład: Niech a = 144 a b = 55. Algorytm NWD wykonał 9 obrotów, aby obliczyć NWD z a i b: NWD(144, 55) = NWD(55, 34) = NWD(34, 21) = NWD(21, 13) = NWD(13, 8) = NWD(8, 5) = NWD(5, 3) = NWD(3, 2) = NWD(2, 1) = NWD(1, 0) = 1 Ograniczenie zgodne z Tw. Gabriel Lamé: 5 2 = 10 Ulepszone ograniczenie: 2 ln(10)/ln(1.62) = 2 4, 77 = 9, 54 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 14 / 61
15 Liczby trójkatne Liczby trójkatne: 1, 3, 6, 10, 15, 21, itd.. n-ty element ciagu otrzymujemy poprzez dodanie liczby n do poprzedniego elementu ciagu, tj.: drugi element ciagu to 2 plus wartość pierwszego elementu (czyli 1), co daje 3. trzeci element ciagu to 3 plus 3 (wartość drugiego elementu), co daje 6; itd. Liczby trójkatne można przedstawić za pomoca odpowiedniej ilości obiektów (kulek, pudełek, itp.) rozmieszczonych w formie trójkata: Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 15 / 61
16 Algorytm obliczajacy n-ta liczbę trójkatn a Algorytm: triangle (n) 1: if n< 1 then 2: return 0; 3: end if 4: if n==1 then 5: return 1; 6: else 7: return n+ triangle(n - 1); 8: end if //wersja rekurencyjna int triangle (int n) { if (n<1) return 0; if (n==1) return 1; else return n+triangle(n-1); } //wersja iteracyjna int triangle2 (int n) { int total = 0; while (n>0) { total += n--; } return total; } Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 16 / 61
17 Algorytm obliczajacy n-ta liczbę trójkatn a Algorytm: triangle (n) 1: if n< 1 then 2: return 0; 3: end if 4: if n==1 then 5: return 1; 6: else 7: return n+ triangle(n - 1); 8: end if Ślad obliczeń triangle(4) triangle(3) triangle(2) triangle(1) return 1 return 2+1=3 return 3+3=6 return 4+6=10 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 17 / 61
18 Czasowa złożoność obliczeniowa T (n) - czas potrzebny do wykonania funkcji triangle (n) dla dowolnego wejścia o rozmiarze n. Przypadek bazowy: T (1) = 1 (jednostkowy czas pracy, gdy algorytm działa na wejściu wielkości 1); Krok indukcyjny: Dla wejścia o rozmiarze n, algorytm wykonuje pracę jednostkowa realizujac operacje porównania, dodawania (tj. n + triangle(n 1)) oraz zwrotu wartości, a następnie wywołuje sam siebie dla wejścia o rozmiarze n 1. Zatem otrzymujemy następujace równanie: T (n) = T (n 1) + 1 dla n > 0. Jeśli rozwiniemy rekurencję otrzymujemy: T (0) = 1, T (1) = T (0) + 1 = = 2 T (2) = T (1) + 1 = = 3, T (3) = T (2) + 1 = = 4 T (4) = T (3) + 1 = = 5,..., T (n) = n + 1 Zatem T (n) = Θ(n). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 18 / 61
19 Rekurencja - obliczanie a n a n = pow(a, n) = { 1 dla n = 0 a pow(a, n 1) dla n > 0 long long pow(int a, int n) { if (n==0) return 1; else return a*pow(a,n-1); } Ślad obliczeń pow(2,3) pow(2,2) pow(2,1) pow(2,0) return 1. return 2*1 = 2 return 2*2 = 4 return 2*4 =8 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 19 / 61
20 Czasowa złożoność obliczeniowa T (n) - czas potrzebny do wykonania funkcji pow(a,n) dla dowolnego wejścia o rozmiarze n. Przypadek bazowy: T (0) = 1 (jednostkowy czas pracy, gdy algorytm działa na wejściu wielkości 1); Krok indukcyjny: Dla wejścia o rozmiarze n, algorytm wykonuje pracę jednostkowa realizujac operacje porównania, mnożenia (tj. a pow(a, n 1)) oraz zwrotu wartości, a następnie wywołuje sam siebie dla wejścia o rozmiarze n 1. Zatem otrzymujemy następujace równanie: T (n) = T (n 1) + 1 dla n > 0. Jeśli rozwiniemy rekurencję otrzymujemy: T (0) = 1, T (1) = T (0) + 1 = = 2 T (2) = T (1) + 1 = = 3, T (3) = T (2) + 1 = = 4 T (4) = T (3) + 1 = = 5,..., T (n) = n + 1 Zatem T (n) = Θ(n). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 20 / 61
21 Ciag Fibonacciego Liczby naturalne tworzace ciag o takiej własności, że kolejny wyraz (z wyjatkiem dwóch pierwszych) jest suma dwóch poprzednich nazywa się liczbami Fibonacciego. Poczatkowe wartości tego ciagu to: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,... Ciag Fibonacciego zawdzięcza swoja nazwę włoskiemu matematykowi z Pizy, Leonardowi, który pod nazwiskiem Fibonacci wydał w 1202 roku słynna księgę Liber Abaci zawierajac a opis tego ciagu jako rozwiazanie zadania o rozmnażaniu się królików. Ojciec Leonarda nosił przydomek Bonacci, stad syn został Fibonaccim (filius Bonacci - syn dobrotliwego). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 21 / 61
22 Ciag Fibonacciego - rozmnażanie królików Zadanie Fibonacciego: Ile par królików może spłodzić jedna para w ciagu roku, jeśli: każda para rodzi nowa parę w ciagu miesiaca, para staje się płodna po miesiacu, króliki nie umieraja. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 22 / 61
23 Ciag Fibonacciego - rozmnażanie królików Na poczatku 1 para: Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 23 / 61
24 Ciag Fibonacciego - rozmnażanie królików Na poczatku 1 para: W pierwszym miesiacu ta sama 1 para (po 1 miesiacu króliki sa zdolne do rozrodu): Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 23 / 61
25 Ciag Fibonacciego - rozmnażanie królików Drugi miesiac - para wydała na świat nowa parę królików. Sa więc - 2 pary królików Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 24 / 61
26 Ciag Fibonacciego - rozmnażanie królików Trzeci miesiac - stara para (w pionie) wydała na świat kolejna parę królików. Para młoda (po prawej) nie jest jeszcze płodna. Sa teraz 3 pary królików Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 25 / 61
27 Ciag Fibonacciego - rozmnażanie królików Czwarty miesiac - para środkowa wydała na świat kolejna parę królików. Para po prawej wydała na świat 1 parę, a para po lewej jeszcze nie jest gotowa do rozrodu. Zatem mamy - 5 par królików. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 26 / 61
28 Ciag Fibonacciego - Złoty podział W wyniku podzielenia każdej z liczb ciagu przez jej poprzednik otrzymuje się iloraz oscylujacy wokół 1, liczby złotego podziału. W miarę zwiększania się liczb zmniejszaja się odchylenia od tej wartości. Dokładna wartość granicy jest złota liczba: Φ = = 1, Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 27 / 61
29 Ciag Fibonacciego - Złoty podział W wyniku podzielenia każdej z liczb ciagu przez jej poprzednik otrzymuje się iloraz oscylujacy wokół 1, liczby złotego podziału. W miarę zwiększania się liczb zmniejszaja się odchylenia od tej wartości. Dokładna wartość granicy jest złota liczba: Φ = = 1, /144 = /89 = /55 = /34 = /21 = /13 = Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 27 / 61
30 Ciag Fibonacciego - Złoty podział W wyniku podzielenia każdej z liczb ciagu przez jej następnik otrzymuje się iloraz oscylujacy wokół 0, liczby złotego podziału. W miarę zwiększania się liczb zmniejszaja się odchylenia od tej wartości. Dokładna wartość granicy jest złota liczba: 5 1 Φ = = 0, Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 28 / 61
31 Ciag Fibonacciego - Złoty podział W wyniku podzielenia każdej z liczb ciagu przez jej następnik otrzymuje się iloraz oscylujacy wokół 0, liczby złotego podziału. W miarę zwiększania się liczb zmniejszaja się odchylenia od tej wartości. Dokładna wartość granicy jest złota liczba: 5 1 Φ = = 0, /233 = /144 = /89 = /55 = /34 = /21 = Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 28 / 61
32 Ciag Fibonacciego - Złoty podział Złoty podział (łac. sectio aurea), podział harmoniczny, złota proporcja, boska proporcja (łac. divina proportio) - podział odcinka na dwie części tak, by stosunek długości dłuższej z nich do krótszej był taki sam, jak całego odcinka do części dłuższej. Φ = a + b a = a b Złotymi proporcjami wyznaczonymi na podstawie ciagu Fibonacciego posługiwał się w swoim malarstwie Leonardo da Vinci i Botticelli. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 29 / 61
33 Ciag Fibonacciego - gdzie go można znaleźć? Ciag Fibonacciego można odnaleźć w wielu aspektach przyrody, ciag taki opisuje np. liczbę pędów rośliny jednostajnie przyrastajacej w latach. W słoneczniku możemy zaobserwować dwa układy linii spiralnych, wychodzacych ze środka. Liczba linii rozwijajacych się zgodnie z ruchem wskazówek zegara wynosi 55 i tylko 34 skręconych w przeciwna stronę. Takie same spirale można zaobserwować na wielu innych roślinach (np. kalafior, ananas). Liczby spiral występujacych w tych roślinach sa kolejnymi liczbami Fibonacciego. Źródło: Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 30 / 61
34 Ciag Fibonacciego - spirala 0 if n = 0 F(n) = 1 if n = 1 f (n 1) + f (n 2) if n 2 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 31 / 61
35 Ciag Fibonacciego - algorytm rekurencyjny Definicja rekurencyjna: F(0) = 0, F(1) = 1 F(n) = F(n 1) + F(n 2), dla n 2 Algorytm: FIB (n) 1: if n == 0 or n == 1 then 2: return n; 3: end if 4: return FIB(n 2) + FIB(n 1); Złożoność obliczeniowa: Równanie opisujace zachowanie algorytmu: T (n) = T (n 1) + T (n 2) + Θ(1) dla n > 1 oraz T (0) = T (1) = 1. Rozwiazanie T (n) = Θ(φ n ), gdzie φ = , 6 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 32 / 61
36 Ciag Fibonacciego - drzewo wywołań F(5) F(4) F(3) F(2) F(3) F(2) F(1) F(1) F(0) F(2) F(1) F (1) F(0) F(1) F(0) Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 33 / 61
37 Efektywność rekurencyjnego wykonania funkcji Fibonacciego n Liczba dodawań Liczba wywołań Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 34 / 61
38 Ciag Fibonacciego - algorytm iteracyjny Require: Liczba n {F 0,..., F n 1, F n } Algorytm: FIB (n) 1: if n < 2 then 2: return n; 3: else 4: f 0 = 0; 5: f 1 = 1; 6: for i = 2 n do 7: m = f 0 + f 1; 8: f 0 = f 1; 9: f 1 = m; 10: end for 11: end if 12: return m; Złożoność obliczeniowa: Θ(n) Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 35 / 61
39 Efektywność iteracyjnego wykonania funkcji Fibonacciego Liczba przypisań Liczba wywołań n algorytm iteracyjny algorytm rekurencyjny Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 36 / 61
40 Wieże Hanoi Definicja problemu Dane: trzy pale A, B i C oraz N krażków o różnych średnicach. Warunki poczatkowe: Na jeden z pali, np. na A, nałożono krażki tak, że krażek mniejszy nie leży pod wiekszym. Pale B i C sa puste. Problem: Przenieść wszystkie krażki z pala A na C przy założeniu, że: można używać B jako pomocnicze miejsce przechowywania. nie można kłaść krażków wiekszych na mniejsze. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 37 / 61
41 Wieże Hanoi - rozwiazanie rekurencyjne /* Przenosi n dyskow na lewo ( gdy left = true) lub prawo (gdy left = false) Wywolanie: moves(n, true); */ void moves(int n, bool left){ if (n == 0) return; moves(n-1,!left); if (left) cout<<n<< " left" << endl; else cout<<n<< " right"<<endl; moves(n-1,!left); } Ślad wykonania moves(2, true) moves(1, false) moves(0, false) return; 1 right moves(0, true) return; 2 left moves(1, false) moves(0, true) return; 1 right moves (0,false) return; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 38 / 61
42 Wieże Hanoi - wykonanie dla n = 2, 3, right 2. 2 left 3. 1 right 1. 1 left 2. 2 right 3. 1 left 4. 3 left 5. 1 left 6. 2 right 7. 1 left 1. 1 right 2. 2 left 3. 1 right 4. 3 right 5. 1 right 6. 2 left 7. 1 right 8. 4 left 9. 1 right left right right right left right Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 39 / 61
43 Złożoność obliczeniowa Wież Hanoi T(n) - czas potrzebny do wykonania funkcji Hanoi(n) dla dowolnego wejścia o rozmiarze n. Algorytm rekurencyjny realizujacy problem Wież Hanoi (czyli przeniesienie n krażków z jednego palika na drugi z zachowaniem pewnych zasad) implikuje, że T (n) musi spełniać następujace równanie: T (n) = 2 T (n 1) + 1 dla n > 1 oraz T (1) = 1 Przykładowo: T (1) = 1, T (2) = 3, T (3) = 7, T (4) = 15. W ogólności: T (n) = 2 n 1 = Θ(2 n ) Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 40 / 61
44 Wieże Hanoi - algorytm iteracyjny Niech A oznacza pal źródłowy, B pal pomocniczy, C pal docelowy oraz n będzie liczba dysków. 1 numofmoves= pow(2,n) if (n%2 == 0) then zamień miejscami pale $B$ i $C$. 3 for i = 1 to numofmoves do if (i%3 == 1) then przenieś górny dysk z A na C if i%3 == 2 then przenieś górny dysk z A na B if i%3 == 0 then przenieś górny dysk z B na C endfor Złóżoność obliczeniowa: Θ(2 n ) Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 41 / 61
45 Pułapki rekursji - brakujacy przypadek bazowy double H(int n) { return H(n-1) + 1.0/n; } Ślad wykonania H(4), H(3), H(2), H(1), H(0), (-1),... Funkcja raz wywołana będzie wywoływać siebie w nieskończoność. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 42 / 61
46 Pułapki rekursji - brak gwarancji konwergencji double H(int n) { if (n == 1) return 1.0; return H(n) + 1.0/n; } Ślad wykonania H(4), H(4), H(4), H(4),... H(1) return 1.0 Funkcja wywołana dla n = 1 zwróci wartość 1 i zakończy sie, w każdym innym przypadku będzie wywoływać siebie w nieskończoność. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 43 / 61
47 Pułapki rekursji - wadliwy warunek bazowy long H (int n){ if (n == 1) return 1; else if (n % 2 == 0) return H(n-2)*n; else return H(n-1)*n; } Ślad wykonania H(1) return 1 H(5), H(4), H(2), H(0),... H(6), H(4), H(2), H(0),... Funkcja wywołana dla n = 1 zwróci wartość 1 i zakończy sie, w każdym innym przypadku będzie wywoływać siebie w nieskończoność. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 44 / 61
48 Pułapki rekursji - nadmierne wymagania pamięciowe double H(int n) { if (n == 0) return 0.0; return H(n-1) + 1.0/n; } Funkcja rekurencyjna H poprawnie oblicza n-ta liczbę harmoniczna. Jednakże, nie można jej używać dla dużych n, gdyż głębokość rekurencji jest proporcjonalna do n, a to powoduje przepełnienie stosu programu już przy n = double H1(int n) { double suma = 0.0; while (n!=0){ suma+= 1.0/n; n--; } return suma; } Funkcja nierekurencyjna H1 również poprawnie oblicza n-ta liczbę harmoniczna imożna ja stosować dla dużych n. Przykładowo, dla n = Uzyskaliśmy wartość w czasie 1 sek. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 45 / 61
49 Fraktale Fraktale, czyli jak piękna może być matematyka i rekurencja! Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 46 / 61
50 Zbiory Julii - Gaston Julia F(0) = p; F(n + 1) = F(n) 2 + c; gdzie: p - punkt płaszczyzny c - liczba zespolona będaca parametrem zbioru. Dla różnych c otrzymujemy różne zbiory. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 47 / 61
51 Zbiory Mandelbrota (fraktalne żółwie) F(0) = (0, 0); F(n + 1) = F(n) 2 + c; gdzie: c - liczba zespolona będaca parametrem zbioru. Dla różnych c otrzymujemy różne zbiory. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 48 / 61
52 Fraktale Najstarsze fraktale wymyślili matematycy na poczatku XX-wieku, w wyniku zmagań z definicja wymiaru i krzywej. Najwybitniejszym twórca fraktali jest amerykański matematyk i informatyk polskiego pochodzenia - Benoit Mandelbrot. Na międzynarodowym kongresie matematyków w Warszawie w roku 1983 stwierdził, że jest jeszcze za wcześnie na formułowanie ścisłej definicji fraktala ponieważ nie znamy dostatecznie głęboko istoty tego pojęcia. Źródło: wikipedia.org/wiki/ Benoit_Mandelbrot Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 49 / 61
53 Czym jest fraktal? Fraktalem jest wszystko... Benoit Mandelbrot Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 50 / 61
54 Czym jest fraktal? Fraktalem jest wszystko... Benoit Mandelbrot Fraktal jest figura geometryczna o złożonej strukturze, nie będaca krzywa, powierzchnia ani bryła w rozumieniu klasycznej matematyki; charakteryzuje ja ułamkowy wymiar (stad nazwa fraktal -ang. fraction ułamek, łac. fractus złamany). Fraktale sa bardzo skomplikowane. Dopiero komputery umożliwiły ich głębsze poznanie. Wielu badaczy twierdzi, że geometria fraktali jest geometria przyrody. Fraktale dały poczatek nowej geometrii zwanej geometria fraktalna, która pozwala modelować wiele obiektów i zjawisk występujacych w przyrodzie i nie tylko... Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 50 / 61
55 Cechy fraktali Fraktale maja cechę samopodobieństwa. Nie sa określone wzorem matematycznym, tylko zależnościa rekurencyjna. Sa obiektami których wymiar nie jest liczba całkowita. Każdy fraktal można w nieskończoność przybliżać. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 51 / 61
56 Cechy fraktali Fraktale maja cechę samopodobieństwa. Nie sa określone wzorem matematycznym, tylko zależnościa rekurencyjna. Sa obiektami których wymiar nie jest liczba całkowita. Każdy fraktal można w nieskończoność przybliżać. Kalafior Brokuł Drzewo Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 51 / 61
57 Zbiór Georga Cantora ( ) Pierwsze fraktale powstały na przełomie XIX i XX wieku. Ich twórcami byli matematycy: Georg Cantor, David Hilbert, Helge von Koch oraz Wacław Sierpiński. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 52 / 61
58 Zbiór Georga Cantora ( ) Pierwsze fraktale powstały na przełomie XIX i XX wieku. Ich twórcami byli matematycy: Georg Cantor, David Hilbert, Helge von Koch oraz Wacław Sierpiński. W roku 1883 Georg Cantor zaproponował prosta konstrukcję, w wyniku której otrzymuje się zbiór nazwany jego imieniem. Konstrukacja: Odcinek [0, 1] dzielimy na trzy równe części i usuwamy środkowa. Z pozostałymi dwoma odcinkami postępujemy analogicznie. W konsekwencji takiego postępowania w granicy nieskończonej ilości kroków powstaje zbiór punktów Cantora. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 52 / 61
59 Krzywa Kocha - Helge von Koch ( ) W 1904 roku szwedzki matematyk Helge von Koch zaproponował konstrukcję nazywana potocznie płatkiem śniegu. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 53 / 61
60 Krzywa Kocha 1 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 54 / 61
61 Krzywa Kocha 1 2 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 54 / 61
62 Krzywa Kocha 3 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 55 / 61
63 Krzywa Kocha 3 4 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 55 / 61
64 Krzywa Kocha 0) 1) 2) 3) 4) Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 56 / 61
65 Dywan Sierpińskiego W 1916 roku Wacław Sierpiński ( ) rozszerzył zbiór Cantora na dwa wymiary. Kwadrat jednostkowy dzielimy na dziewięć i wyrzucamy środkowy. Postępujemy tak z każdym nowo powstałym kwadratem. Powstały fraktal nazywany dywanem Sierpińskiego. Analogicznie można postapić z trójkatem, którego boki dzielimy na dwie części i powstałe punkty łaczymy co doprowadzi do powstania kolejnego trójkata, który usuwamy. Z pozostałymi trzema postępujemy podobnie, itd. Źródło:http: // org/~history/ Biographies/ Sierpinski.html Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 57 / 61
66 Dywan Sierpińskiego Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 58 / 61
67 Trójkat Sierpińskiego Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 59 / 61
68 Trójkat Sierpińskiego Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 60 / 61
69 Krzywa Hilberta Krzywa Hilberta - to przykład krzywej, która wypełnia całkowicie płaszczyznę, tzn. przechodzi przez wszystkie punkty płaszczyzny. Konstrukcja tej krzywej została podana przez Davida Hilberta w 1891 jako wariant krzywej Peano. n = 1 n = 2 n = 3 n = 4 n = 5 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 61 / 61
Algorytmy i Struktury Danych.
Algorytmy i Struktury Danych. Rekurencja dr hab. Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 2 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 1
Bardziej szczegółowoWstęp do Informatyki
Wstęp do Informatyki dr hab. Bożena Woźna-Szcześniak, prof. AJD bwozna@gmail.com Jan Długosz University, Poland Wykład 8 Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 8 1 / 1 Rekurencja Rekurencja
Bardziej szczegółowoPodstawy Informatyki
Podstawy Informatyki Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 14 Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 14 1 / 1 Rekurencja Rekurencja albo rekursja
Bardziej szczegółowoRekurencja. Przygotowała: Agnieszka Reiter
Rekurencja Przygotowała: Agnieszka Reiter Definicja Charakterystyczną cechą funkcji (procedury) rekurencyjnej jest to, że wywołuje ona samą siebie. Drugą cechą rekursji jest jej dziedzina, którą mogą być
Bardziej szczegółowoFRAKTALE. nie tworzą się z przypadku. Są tworzone naturalnie przez otaczającą nas przyrodę, bądź za pomocą
Małgorzata Mielniczuk FRAKTALE Poniższy referat będzie traktować o fraktalach, majestatycznych wzorach, których kręte linie nie tworzą się z przypadku. Są tworzone naturalnie przez otaczającą nas przyrodę,
Bardziej szczegółowoCiągi liczbowe. - oznacza, że a(1) = a 1, a(2) = a 2, a(n) = a n a 1, a 2, a 3, a 4,... a n a(n) a n
Ciągi liczbowe Spis treści Ciąg liczbowy Ciąg liczbowy skończony Ciąg liczbowy nieskończony Przykłady i sposoby określania ciągu, suma n początkowych wyrazów ciągu Suma n początkowych, kolejnych wyrazów
Bardziej szczegółowoFRAKTALE I SAMOPODOBIEŃSTWO
FRAKTALE I SAMOPODOBIEŃSTWO Mariusz Gromada marzec 2003 mariusz.gromada@wp.pl http://multifraktal.net 1 Wstęp Fraktalem nazywamy każdy zbiór, dla którego wymiar Hausdorffa-Besicovitcha (tzw. wymiar fraktalny)
Bardziej szczegółowoFUNKCJA REKURENCYJNA. function s(n:integer):integer; begin if (n>1) then s:=n*s(n-1); else s:=1; end;
Rekurencja Wykład: rekursja, funkcje rekurencyjne, wywołanie samej siebie, wyznaczanie poszczególnych liczb Fibonacciego, potęgowanie, algorytm Euklidesa REKURENCJA Rekurencja (z łac. recurrere), zwana
Bardziej szczegółowoPodstawowe algorytmy i ich implementacje w C. Wykład 9
Wstęp do programowania 1 Podstawowe algorytmy i ich implementacje w C Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 9 Element minimalny i maksymalny zbioru Element minimalny
Bardziej szczegółowoFraktale. i Rachunek Prawdopodobieństwa
Fraktale i Rachunek Prawdopodobieństwa Przyjrzyjmy się poniższemu rysunkowi, przedstawiającemu coś,, co kształtem tem przypomina drzewo o bardzo regularnej strukturze W jaki sposób b najłatwiej atwiej
Bardziej szczegółowoProjekt współfinansowany przez Unię Europejską ze środków Europejskiego Funduszu Społecznego
Wstęp Rekurencja jest to wywołanie podprogramu (procedury) samej przez siebie. W logo zapis rekurencji będzie wyglądał następująco: oto nazwa_funkcji czynności_wykonywane_przez_procedurę nazwa_funkcji
Bardziej szczegółowoModele i symulacje - Scratch i Excel
Instytut Matematyki Uniwersytet Gdański Literatura P. Szlagowski, Programowanie wizualne scratch 2.0 SCRATCH jest językiem programowania, w którym możesz stworzyć własne interaktywne historyjki, animacje,
Bardziej szczegółowo5. Rekurencja. Przykłady
5. Rekurencja Uwaga! W tym rozdziale nie są omówione żadne nowe konstrukcje języka C++. Omówiona jest za to technika wykorzystująca funkcje, która pozwala na rozwiązanie pewnych nowych rodzajów zadań.
Bardziej szczegółowoALGORYTMY I STRUKTURY DANYCH
KATEDRASYSTEMÓWOBLICZENIOWYCH ALGORYTMY I STRUKTURY DANYCH 1.Rekurencja Rekurencja inaczej rekursja (ang. recursion) to wywołanie z poziomu metody jej samej. Programowanie z wykorzytaniem rekurencji pozwala
Bardziej szczegółowo12. Rekurencja. UWAGA Trzeba bardzo dokładnie ustalić <warunek>, żeby mieć pewność, że ciąg wywołań się zakończy.
12. Rekurencja. Funkcja rekurencyjna funkcja, która wywołuje samą siebie. Naturalne postępowanie: np. zbierając rozsypane pionki do gry podnosi się zwykle pierwszy, a potem zbiera się resztę w ten sam
Bardziej szczegółowoFraktale wokół nas. Leszek Rudak Uniwersytet Warszawski. informatyka +
Fraktale wokół nas Leszek Rudak Uniwersytet Warszawski informatyka + 1 Podobieństwo figur informatyka + 2 Figury podobne Figury są podobne gdy proporcjonalnie zwiększając lub zmniejszając jedną z nich
Bardziej szczegółowoWstęp do Informatyki
Wstęp do Informatyki dr hab. Bożena Woźna-Szcześniak, prof. AJD bwozna@gmail.com Jan Długosz University, Poland Wykład 8 Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 8 1 / 32 Instrukcje iteracyjne
Bardziej szczegółowoObrazy rekurencyjne. Zastosowanie rekurencji w algorytmice. AUTOR: Martin Śniegoń
Obrazy rekurencyjne Zastosowanie rekurencji w algorytmice AUTOR: Martin Śniegoń Zdolność procedury/funkcji do wywoływania samej siebie Podstawowa i jedna z najważniejszych technik programistycznych Umożliwia
Bardziej szczegółowoWykład 8. Rekurencja. Iterować jest rzeczą ludzką, wykonywać rekursywnie boską. L. Peter Deutsch
Wykład 8 Iterować jest rzeczą ludzką, wykonywać rekursywnie boską. Smok podsuszony zmok (patrz: Zmok). Zmok zmoczony smok (patrz: Smok). L. Peter Deutsch Stanisław Lem Wizja lokalna J. Cichoń, P. Kobylański
Bardziej szczegółowoWstęp do programowania
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ł
Bardziej szczegółowoCiąg Fibonacciego jako szczególny przykład ciągu określonego rekurencyjnie. Przykłady rekurencji w informatyce
SCENARIUSZ LEKCJI OPRACOWANY W RAMACH PROJEKTU: INFORMATYKA MÓJ SPOSÓB NA POZNANIE I OPISANIE ŚWIATA. PROGRAM NAUCZANIA INFORMATYKI Z ELEMENTAMI PRZEDMIOTÓW MATEMATYCZNO-PRZYRODNICZYCH Autorzy scenariusza:
Bardziej szczegółowoCiągi i rekurencja, komputer dla matematyka. warsztaty towarzyszące konferencji Informatyka realnie prowadzą: Hanna Basaj Jan Aleksander Wierzbicki
Ciągi i rekurencja, komputer dla matematyka warsztaty towarzyszące konferencji Informatyka realnie prowadzą: Hanna Basaj Jan Aleksander Wierzbicki Ciągi określone rekurencyjnie w projekcie nowej podstawy
Bardziej szczegółowoRekurencja (rekursja)
Rekurencja (rekursja) Rekurencja wywołanie funkcji przez nią samą wewnątrz ciała funkcji. Rekurencja może być pośrednia funkcja jest wywoływana przez inną funkcję, wywołaną (pośrednio lub bezpośrednio)
Bardziej szczegółowoO rekurencji i nie tylko
O rekurencji i nie tylko dr Krzysztof Bryś Wydział Matematyki i Nauk Informacyjnych Politechnika Warszawska 10 grudnia 2011 Intuicyjnie: rekurencja sprowadzenie rozwiązania danego problemu do rozwiązania
Bardziej szczegółowoPodstawy programowania 2. Temat: Funkcje i procedury rekurencyjne. Przygotował: mgr inż. Tomasz Michno
Instrukcja laboratoryjna 6 Podstawy programowania 2 Temat: Funkcje i procedury rekurencyjne Przygotował: mgr inż. Tomasz Michno Wstęp teoretyczny Rekurencja (inaczej nazywana rekursją, ang. recursion)
Bardziej szczegółowo1. Liczby wymierne. x dla x 0 (wartością bezwzględną liczby nieujemnej jest ta sama liczba)
1. Liczby wymierne. - wartość bezwzględna liczby. dla 0 (wartością bezwzględną liczby nieujemnej jest ta sama liczba) - dla < 0 ( wartością bezwzględną liczby ujemnej jest liczba do niej przeciwna) W interpretacji
Bardziej szczegółowoAlgorytmy i Struktury Danych.
Algorytmy i Struktury Danych. Metoda Dziel i zwyciężaj. Problem Sortowania, cd. Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 2 Bożena Woźna-Szcześniak (AJD) Algorytmy
Bardziej szczegółowoPodstawy algorytmiki i programowania - wykład 3 Funkcje rekurencyjne Wyszukiwanie liniowe i binarne w tablicy
1 Podstawy algorytmiki i programowania - wykład 3 Funkcje rekurencyjne Wyszukiwanie liniowe i binarne w tablicy Treści prezentowane w wykładzie zostały oparte o: S. Prata, Język C++. Szkoła programowania.
Bardziej szczegółowoFraktale deterministyczne i stochastyczne. Katarzyna Weron Katedra Fizyki Teoretycznej
Fraktale deterministyczne i stochastyczne Katarzyna Weron Katedra Fizyki Teoretycznej Szare i Zielone Scena z Fausta Goethego (1749-1832), Mefistofeles do doktora (2038-2039): Wszelka, mój bracie, teoria
Bardziej szczegółowoRekurencja. Przykład. Rozważmy ciąg
Rekurencja Definicje rekurencyjne Definicja: Mówimy, iż ciąg jest zdefiniowany rekurencyjnie, jeżeli: (P) Określony jest pewien skończony zbiór wyrazów tego ciągu, zwykle jest to pierwszy wyraz tego ciągu
Bardziej szczegółowoAlgorytmy i Struktury Danych
POLITECHNIKA KRAKOWSKA WYDZIAŁ INŻYNIERII ELEKTRYCZNEJ i KOMPUTEROWEJ Katedra Automatyki i Technik Informacyjnych Algorytmy i Struktury Danych www.pk.edu.pl/~zk/aisd_hp.html Wykładowca: dr inż. Zbigniew
Bardziej szczegółowoZaawansowane algorytmy i struktury danych
Zaawansowane algorytmy i struktury danych u dr Barbary Marszał-Paszek Opracowanie pytań praktycznych z egzaminów. Strona 1 z 12 Pytania praktyczne z kolokwium zaliczeniowego z 19 czerwca 2014 (studia dzienne)
Bardziej szczegółowoZbiór Cantora. Diabelskie schody.
Zbiór Cantora. Diabelskie schody. Autor: Norbert Miękina Zespół Szkół nr 3 im. ks. prof. Józefa Tischnera ul. Krakowska 20 32-700 Bochnia tel. 14 612-27-79 Opiekun: mgr Barbara Góra 1 W matematyce sztuka
Bardziej szczegółowoWieczorowe Studia Licencjackie Wrocław, Wykład nr 6 (w oparciu o notatki K. Lorysia, z modyfikacjami) Sito Eratostenesa
Wieczorowe Studia Licencjackie Wrocław, 7.11.2006 Wstęp do programowania Wykład nr 6 (w oparciu o notatki K. Lorysia, z modyfikacjami) Sito Eratostenesa Zaprezentujemy teraz algorytm na wyznaczanie wszystkich
Bardziej szczegółowoProgramowanie Proceduralne
Programowanie Proceduralne Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 1 Bożena Woźna-Szcześniak (AJD) Programowanie Proceduralne Wykład 1 1 / 59 Cel wykładów z programowania
Bardziej szczegółowoPoprawność semantyczna
Poprawność składniowa Poprawność semantyczna Poprawność algorytmu Wypisywanie zdań z języka poprawnych składniowo Poprawne wartościowanie zdań języka, np. w języku programowania skutki wystąpienia wyróżnionych
Bardziej szczegółowoRekurencja. Rekurencja zwana także rekursją jest jedną z najważniejszych metod konstruowania rozwiązań i algorytmów.
Rekurencja Rekurencja zwana także rekursją jest jedną z najważniejszych metod konstruowania rozwiązań i algorytmów. Zgodnie ze znaczeniem informatycznym algorytm rekurencyjny to taki który korzysta z samego
Bardziej szczegółowoStrategia "dziel i zwyciężaj"
Strategia "dziel i zwyciężaj" W tej metodzie problem dzielony jest na kilka mniejszych podproblemów podobnych do początkowego problemu. Problemy te rozwiązywane są rekurencyjnie, a następnie rozwiązania
Bardziej szczegółowoPodstawy programowania. Wykład: 13. Rekurencja. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD
Podstawy programowania Wykład: 13 Rekurencja 1 dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD Podstawy programowania Rekurencja - pojęcie 2 Rekurencja - pojęcie Rekurencja (rekursja) wywołanie
Bardziej szczegółowoRekurencja. Rekurencja zwana także rekursją jest jedną z najważniejszych metod konstruowania rozwiązań i algorytmów.
Rekurencja Rekurencja zwana także rekursją jest jedną z najważniejszych metod konstruowania rozwiązań i algorytmów. Zgodnie ze znaczeniem informatycznym algorytm rekurencyjny to taki który korzysta z samego
Bardziej szczegółowoAlgorytmika i programowanie. Wykład 2 inż. Barbara Fryc Wyższa Szkoła Informatyki i Zarządzania w Rzeszowie
Algorytmika i programowanie Wykład 2 inż. Barbara Fryc Wyższa Szkoła Informatyki i Zarządzania w Rzeszowie Tablice Tablica jest zbiorem elementów tego samego typu. Każdy element jest identyfikowany (numer
Bardziej szczegółowoJezyki i metody programowania
Jezyki i metody programowania WYKŁAD 3 i 4 Logo Dr Bożena Woźna-Szcześniak bwozna@gmail.com Instytut Matematyki i Informatyki Akademia im. Jana Długosza LOGO KOMENIUSZ LOGO KOMENIUSZ jest rozprowadzany
Bardziej szczegółowoZa pierwszy niebanalny algorytm uważa się algorytm Euklidesa wyszukiwanie NWD dwóch liczb (400 a 300 rok przed narodzeniem Chrystusa).
Algorytmy definicja, cechy, złożoność. Algorytmy napotykamy wszędzie, gdziekolwiek się zwrócimy. Rządzą one wieloma codziennymi czynnościami, jak np. wymiana przedziurawionej dętki, montowanie szafy z
Bardziej szczegółowoTEORETYCZNE PODSTAWY INFORMATYKI
1 TEORETYCZNE PODSTAWY INFORMATYKI 16/01/2017 WFAiS UJ, Informatyka Stosowana I rok studiów, I stopień Repetytorium złożoność obliczeniowa 2 Złożoność obliczeniowa Notacja wielkie 0 Notacja Ω i Θ Rozwiązywanie
Bardziej szczegółowoTechnologie informacyjne Wykład VII-IX
Technologie informacyjne -IX A. Matuszak 19 marca 2013 A. Matuszak Technologie informacyjne -IX Rekurencja A. Matuszak (2) Technologie informacyjne -IX Gotowanie jajek na miękko weż czysty garnek włóż
Bardziej szczegółowoZłota liczba. Zajęcia matematyczno przyrodnicze w Szkole Podstawowej w Antolce
Złota liczba Zajęcia matematyczno przyrodnicze w Szkole Podstawowej w Antolce Ciąg Fibonacciego 1,1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377, Ciąg Fibonacciego ma wiele ciekawych własności. Zbadajmy
Bardziej szczegółowoAlgorytmy w teorii liczb
Łukasz Kowalik, ASD 2004: Algorytmy w teorii liczb 1 Algorytmy w teorii liczb Teoria liczb jest działem matemtyki dotyczącym własności liczb naturalnych. Rozważa się zagadnienia związane z liczbami pierwszymi,
Bardziej szczegółowoIndukcja matematyczna. Zasada minimum. Zastosowania.
Indukcja matematyczna. Zasada minimum. Zastosowania. Arkadiusz Męcel Uwagi początkowe W trakcie zajęć przyjęte zostaną następujące oznaczenia: 1. Zbiory liczb: R - zbiór liczb rzeczywistych; Q - zbiór
Bardziej szczegółowoRaport z projektu. Przedmiot: Algorytmy i struktury danych 1 Projekt: Wieża Hanoi Autor: Wojciech Topolski
Raport z projektu Przedmiot: Algorytmy i struktury danych 1 Projekt: Wieża Hanoi Autor: Wojciech Topolski Problem wieży Hanoi W wielkiej świątyni Benares w Hanoi, pod kopułą, która zaznacza środek świata,
Bardziej szczegółowoZadania do samodzielnego rozwiązania
Zadania do samodzielnego rozwiązania I. Podzielność liczb całkowitych 1. Pewna liczba sześciocyfrowa a kończy się cyfrą 5. Jeśli tę cyfrę przestawimy na miejsce pierwsze ze strony lewej, to otrzymamy nową
Bardziej szczegółowosamopodobnym nieskończenie subtelny
Fraktale Co to jest fraktal? Według definicji potocznej fraktal jest obiektem samopodobnym tzn. takim, którego części są podobne do całości lub nieskończenie subtelny czyli taki, który ukazuje subtelne
Bardziej szczegółowoWHILE (wyrażenie) instrukcja;
INSTRUKCJE ITERACYJNE WHILE, DO WHILE, FOR Instrukcje iteracyjne pozwalają powtarzać daną instrukcję programu określoną liczbę razy lub do momentu osiągnięcia określonego skutku. Pętla iteracyjna while
Bardziej szczegółowoMatematyka dyskretna. Andrzej Łachwa, UJ, A/15
Matematyka dyskretna Andrzej Łachwa, UJ, 2016 andrzej.lachwa@uj.edu.pl 4A/15 Liczby Fibonacciego Spośród ciągów zdefiniowanych rekurencyjnie, jednym z najsłynniejszych jest ciąg Fibonacciego (z roku 1202)
Bardziej szczegółowoPodstawy programowania. Wykład: 4. Instrukcje sterujące, operatory. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD
programowania Wykład: 4 Instrukcje sterujące, operatory 1 programowania w C++ Instrukcje sterujące 2 Pętla for for ( instrukcja_ini ; wyrazenie_warunkowe ; instrukcja_krok ) tresc_petli ; instrukcja_ini
Bardziej szczegółowoRekurencja. Matematyka dyskretna
Rekurencja Matematyka dyskretna Rekurencja Definicja rekurencyjna (indukcyjna) nieformalnie: taka definicja, która odwołuje się do samej siebie, ale trzeba tu uważać, by odwołanie było do instancji o mniejszej
Bardziej szczegółowoAlgorytmy i Struktury Danych
Algorytmy i Struktury Danych Kopce Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 11 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 11 1 / 69 Plan wykładu
Bardziej szczegółowowykł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
i cz. 2 Programowanie uzupełnienie notatek: dr Jerzy Białkowski 1 i cz. 2 2 i cz. 2 3 Funkcje i cz. 2 typ nazwa ( lista-parametrów ) { deklaracje instrukcje } i cz. 2 typ nazwa ( lista-parametrów ) { deklaracje
Bardziej szczegółowoZłożoność obliczeniowa zadania, zestaw 2
Złożoność obliczeniowa zadania, zestaw 2 Określanie złożoności obliczeniowej algorytmów, obliczanie pesymistycznej i oczekiwanej złożoności obliczeniowej 1. Dana jest tablica jednowymiarowa A o rozmiarze
Bardziej szczegółowo4. Funkcje. Przykłady
4. Funkcje Przykłady 4.1. Napisz funkcję kwadrat, która przyjmuje jeden argument: długość boku kwadratu i zwraca pole jego powierzchni. Używając tej funkcji napisz program, który obliczy pole powierzchni
Bardziej szczegółowoPodstawy Informatyki dla Nauczyciela
Podstawy Informatyki dla Nauczyciela Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 2 Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki dla Nauczyciela Wykład 2 1 / 1 Informacja
Bardziej szczegółowoMatematyka dyskretna. Andrzej Łachwa, UJ, a/15
Matematyka dyskretna Andrzej Łachwa, UJ, 2017 andrzej.lachwa@uj.edu.pl 3a/15 Indukcja matematyczna Zasada Minimum Dowolny niepusty podzbiór S zbioru liczb naturalnych ma w sobie liczbę najmniejszą. Zasada
Bardziej szczegółowoZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2014/2015. Drzewa BST c.d., równoważenie drzew, kopce.
POLITECHNIKA WARSZAWSKA Instytut Automatyki i Robotyki ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 204/205 Język programowania: Środowisko programistyczne: C/C++ Qt Wykład 2 : Drzewa BST c.d., równoważenie
Bardziej szczegółowoIndukcja. Materiały pomocnicze do wykładu. wykładowca: dr Magdalena Kacprzak
Indukcja Materiały pomocnicze do wykładu wykładowca: dr Magdalena Kacprzak Charakteryzacja zbioru liczb naturalnych Arytmetyka liczb naturalnych Jedną z najważniejszych teorii matematycznych jest arytmetyka
Bardziej szczegółowoMatematyka dyskretna
Matematyka dyskretna Wykład 4: Podzielność liczb całkowitych Gniewomir Sarbicki Dzielenie całkowitoliczbowe Twierdzenie: Dla każdej pary liczb całkowitych (a, b) istnieje dokładnie jedna para liczb całkowitych
Bardziej szczegółowoKrzywa uniwersalna Sierpińskiego
Krzywa uniwersalna Sierpińskiego Małgorzata Blaszke Karol Grzyb Streszczenie W niniejszej pracy omówimy krzywą uniwersalną Sierpińskiego, zwaną również dywanem Sierpińskiego. Pokażemy klasyczną metodę
Bardziej szczegółowoTeoretyczne podstawy informatyki
Teoretyczne podstawy informatyki Wykład 4a: Rozwiązywanie rekurencji http://kiwi.if.uj.edu.pl/~erichter/dydaktyka2010/tpi-2010 Prof. dr hab. Elżbieta Richter-Wąs 1 Czas działania programu Dla konkretnych
Bardziej szczegółowoMatematyka dyskretna. Andrzej Łachwa, UJ, /14
Matematyka dyskretna Andrzej Łachwa, UJ, 2012 andrzej.lachwa@uj.edu.pl 5/14 Rekurencja Weźmy dla przykładu wzór (przepis) na liczenie silni: n! to iloczyn kolejnych liczb naturalnych od 1 do n oraz 0!=1.
Bardziej szczegółowoPodstawy Informatyki. Sprawność algorytmów
Podstawy Informatyki Sprawność algorytmów Sprawność algorytmów Kryteria oceny oszczędności Miara złożoności rozmiaru pamięci (złożoność pamięciowa): Liczba zmiennych + liczba i rozmiar struktur danych
Bardziej szczegółowoMatematyka dyskretna. Andrzej Łachwa, UJ, /10
Matematyka dyskretna Andrzej Łachwa, UJ, 2018 andrzej.lachwa@uj.edu.pl 4/10 rekurencja Wzór (przepis) na liczenie silni: n! to iloczyn kolejnych liczb naturalnych od 1 do n oraz 0!=1. Oto wartości silni
Bardziej szczegółowoWHILE (wyrażenie) instrukcja;
INSTRUKCJE ITERACYJNE WHILE, DO WHILE, FOR Instrukcje iteracyjne pozwalają powtarzać daną instrukcję programu określoną liczbę razy lub do momentu osiągnięcia określonego skutku. Pętla iteracyjna while
Bardziej szczegółowoZadanie 1. Test (6 pkt) Zaznacz znakiem X w odpowiedniej kolumnie P lub F, która odpowiedź jest prawdziwa, a która fałszywa.
2 Egzamin maturalny z informatyki Zadanie 1. Test (6 pkt) Zaznacz znakiem X w odpowiedniej kolumnie lub, która odpowiedź jest prawdziwa, a która fałszywa. a) rzeanalizuj poniższy algorytm (:= oznacza instrukcję
Bardziej szczegółowoProgramowanie w Baltie klasa VII
Programowanie w Baltie klasa VII Zadania z podręcznika strona 127 i 128 Zadanie 1/127 Zadanie 2/127 Zadanie 3/127 Zadanie 4/127 Zadanie 5/127 Zadanie 6/127 Ten sposób pisania programu nie ma sensu!!!.
Bardziej szczegółowoPodstawy programowania. Podstawy C# Przykłady algorytmów
Podstawy programowania Podstawy C# Przykłady algorytmów Proces tworzenia programu Sformułowanie problemu funkcje programu zakres i postać danych postać i dokładność wyników Wybór / opracowanie metody rozwiązania
Bardziej szczegółowoAlgorytm. a programowanie -
Algorytm a programowanie - Program komputerowy: Program komputerowy można rozumieć jako: kod źródłowy - program komputerowy zapisany w pewnym języku programowania, zestaw poszczególnych instrukcji, plik
Bardziej szczegółowoWykład 3. Metoda dziel i zwyciężaj
Wykład 3 Metoda dziel i zwyciężaj 1 Wprowadzenie Technika konstrukcji algorytmów dziel i zwyciężaj. przykładowe problemy: Wypełnianie planszy Poszukiwanie (binarne) Sortowanie (sortowanie przez łączenie
Bardziej szczegółowoMetody numeryczne w przykładach
Metody numeryczne w przykładach Bartosz Ziemkiewicz Wydział Matematyki i Informatyki UMK, Toruń Regionalne Koło Matematyczne 8 kwietnia 2010 r. Bartosz Ziemkiewicz (WMiI UMK) Metody numeryczne w przykładach
Bardziej szczegółowoAlgorytmy. wer Wojciech Myszka 30 listopada 2008
Algorytmy Część IV wer. 1.2 Wojciech Myszka 30 listopada 2008 Spis treści I Spis treści Jak się tworzy algorytmy? Poszukiwania i wędrówki Dziel i zwyciężaj Rekurencja Definicje Przykład Schemat blokowy
Bardziej szczegółowoAnaliza algorytmów zadania podstawowe
Analiza algorytmów zadania podstawowe Zadanie 1 Zliczanie Zliczaj(n) 1 r 0 2 for i 1 to n 1 3 do for j i + 1 to n 4 do for k 1 to j 5 do r r + 1 6 return r 0 Jaka wartość zostanie zwrócona przez powyższą
Bardziej szczegółowoWykład 2. Poprawność algorytmów
Wykład 2 Poprawność algorytmów 1 Przegląd Ø Poprawność algorytmów Ø Podstawy matematyczne: Przyrost funkcji i notacje asymptotyczne Sumowanie szeregów Indukcja matematyczna 2 Poprawność algorytmów Ø Algorytm
Bardziej szczegółowoStruktury danych i złożoność obliczeniowa Wykład 2. Prof. dr hab. inż. Jan Magott
Struktury danych i złożoność obliczeniowa Wykład 2. Prof. dr hab. inż. Jan Magott Metody konstrukcji algorytmów: Siłowa (ang. brute force), Dziel i zwyciężaj (ang. divide-and-conquer), Zachłanna (ang.
Bardziej szczegółowoAnaliza algorytmów zadania podstawowe
Analiza algorytmów zadania podstawowe 15 stycznia 2019 Zadanie 1 Zliczanie Zliczaj(n) 1 r 0 2 for i 1 to n 1 3 do for j i + 1 to n 4 do for k 1 to j 5 do r r + 1 6 return r P Jaka wartość zostanie zwrócona
Bardziej szczegółowoAlgorytmy i Struktury Danych.
Algorytmy i Struktury Danych. Grafy dr hab. Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 9 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 1 / 20
Bardziej szczegółowoWYMAGANIA EDUKACYJNE Z MATEMATYKI KLASA I GIMNAZJUM Małgorzata Janik
WYMAGANIA EDUKACYJNE Z MATEMATYKI KLASA I GIMNAZJUM Małgorzata Janik DOPUSZCZAJĄCY DOSTATECZNY DOBRY BARDZO DOBRY LICZBY I DZIAŁANIA zna pojęcie liczby naturalnej, całkowitej, wymiernej. rozumie rozszerzenie
Bardziej szczegółowoProgramowanie Równoległe i Rozproszone. Algorytm Kung a. Algorytm Kung a. Programowanie Równoległe i Rozproszone Wykład 8. Przygotował: Lucjan Stapp
Programowanie Równoległe i Rozproszone Lucjan Stapp Wydział Matematyki i Nauk Informacyjnych Politechnika Warszawska (l.stapp@mini.pw.edu.pl) 1/34 PRiR Algorytm Kunga Dany jest odcinek [a,b] i ciągła funkcja
Bardziej szczegółowoJęzyki i metody programowania
Języki i metody programowania Wykład 3 dr hab. Bożena Woźna-Szcześniak bwozna@gmail.com Instytut Matematyki i Informatyki Akademia Jana Długosza w Częstochowie hab. Andrzeja Zbrzezngo Wartości boolowskie
Bardziej szczegółowoJarosław Wróblewski Matematyka Elementarna, zima 2015/16
Na ćwiczeniach 6.0.205 omawiamy test kwalifikacyjny. Uwaga: Przyjmujemy, że 0 nie jest liczbą naturalną, tzn. liczby naturalne są to liczby całkowite dodatnie.. Sformułować uogólnione cechy podzielności
Bardziej szczegółowoZadania domowe. Ćwiczenie 2. Rysowanie obiektów 2-D przy pomocy tworów pierwotnych biblioteki graficznej OpenGL
Zadania domowe Ćwiczenie 2 Rysowanie obiektów 2-D przy pomocy tworów pierwotnych biblioteki graficznej OpenGL Zadanie 2.1 Fraktal plazmowy (Plasma fractal) Kwadrat należy pokryć prostokątną siatką 2 n
Bardziej szczegółowoWymagania edukacyjne z matematyki dla klasy I gimnazjum wg programu Matematyka z plusem
Wymagania edukacyjne z matematyki dla klasy I gimnazjum wg programu Matematyka z plusem pojęcie liczby naturalnej, całkowitej, wymiernej rozszerzenie osi liczbowej na liczby ujemne sposób i potrzebę zaokrąglania
Bardziej szczegółowoFILO MATH ZESPÓŁ SZKÓŁ OGÓLNOKSZTAŁCĄCYCH GAZETKA KOŁA MATEMATYCZNEGO CO W NUMERZE: PRZEGLĄD MATEMATYKÓW. W KAMIENNEJ GÓRZE
ZESPÓŁ SZKÓŁ OGÓLNOKSZTAŁCĄCYCH W KAMIENNEJ GÓRZE FILO MATH GAZETKA KOŁA MATEMATYCZNEGO CZERWIEC 2014 NR 3 (5)/2014 CO W NUMERZE: PRZEGLĄD MATEMATYKÓW: Fibonacci.... Ogłoszenie Dzień otwartej szkoły..
Bardziej szczegółowoPodstawy Informatyki
Podstawy Informatyki Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 5 Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 5 1 / 23 LICZBY RZECZYWISTE - Algorytm Hornera
Bardziej szczegółowoWstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami
Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami Przykład 1. Napisz program, który dla podanej liczby n wypisze jej rozkład na czynniki pierwsze. Oblicz asymptotyczną złożoność
Bardziej szczegółowoWstęp do Informatyki
Wstęp do Informatyki Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 4 Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 4 1 / 1 DZIELENIE LICZB BINARNYCH Dzielenie
Bardziej szczegółowoRekurencje. Jeśli algorytm zawiera wywołanie samego siebie, jego czas działania moŝe być określony rekurencją. Przykład: sortowanie przez scalanie:
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
Bardziej szczegółowoKRZYŻÓWKA 2. 11. Może być np. równoboczny lub rozwartokątny. Jego pole to a b HASŁO:
KRZYŻÓWKA.Wyznaczają ją dwa punkty.. Jego pole to π r² 3. Jego pole to a a 4.Figura przestrzenna, której podstawą jest dowolny wielokąt, a ściany boczne są trójkątami o wspólnym wierzchołku. 5.Prosta mająca
Bardziej szczegółowoWymagania edukacyjne niezbędne do otrzymania poszczególnych śródrocznych i rocznych ocen klasyfikacyjnych z matematyki dla klasy VIII
Wymagania edukacyjne niezbędne do otrzymania poszczególnych śródrocznych i rocznych ocen klasyfikacyjnych z matematyki dla klasy VIII Temat 1. System rzymski. 2. Własności liczb naturalnych. 3. Porównywanie
Bardziej szczegółowoRekurencja. Dla rozwiązania danego problemu, algorytm wywołuje sam siebie przy rozwiązywaniu podobnych podproblemów. Przykład: silnia: n! = n(n-1)!
Rekurencja Dla rozwiązania danego problemu, algorytm wywołuje sam siebie przy rozwiązywaniu podobnych podproblemów. Przykład: silnia: n! = n(n-1)! Pseudokod: silnia(n): jeżeli n == 0 silnia = 1 w przeciwnym
Bardziej szczegółowoPodstawy Informatyki. Algorytmy i ich poprawność
Podstawy Informatyki Algorytmy i ich poprawność Błędy Błędy: językowe logiczne Błędy językowe Związane ze składnią języka Wykrywane automatycznie przez kompilator lub interpreter Prosty sposób usuwania
Bardziej szczegółowoMetody algortmiczne (Algorytmy Część IV)
Metody algortmiczne (Algorytmy Część IV) wer. 9 z drobnymi modyfikacjami! Wojciech Myszka 2018-10-02 17:27:45 +0200 Jak się tworzy algorytmy? Moja odpowiedź jest krótka: Jak się tworzy algorytmy? Moja
Bardziej szczegółowoRekurencja/rekursja. Iluzja istnienia wielu kopii tego samego algorytmu (aktywacji) Tylko jedna aktywacja jest aktywna w danej chwili
rekurencja 1 Rekurencja/rekursja Alternatywny dla pętli sposób powtarzania pewnych czynności; kolejny etap podzadanie poprzedniego Rekursja może być zamieniona na iteracje Cechy rekurencji Rozłożenie problemu
Bardziej szczegółowoRekurencja, schemat rekursji i funkcje pierwotnie rekurencyjne
Rekurencja, schemat rekursji i funkcje pierwotnie rekurencyjne Elementy Logiki i Teorii Mnogości 2015/2016 Zadanie 1. Oblicz iteracyjnie i rekurencyjnie f(4), gdzie f jest funkcją określoną na zbiorze
Bardziej szczegółowo