Technologie informacyjne – Wykład VII-IX
Transkrypt
Technologie informacyjne – Wykład VII-IX
Wykład VII Wykład VIII Wykład IX Technologie informacyjne – Wykład VII-IX A. Matuszak 19 marca 2013 A. Matuszak Technologie informacyjne – Wykład VII-IX Wykład VII Wykład VIII Wykład IX Wykład VII Algorytm Pseudokod Wykład VIII Rekurencja Wykład IX Dobry algorytm Złożoność algorytmu Rząd zbieżności algorytmu A. Matuszak (2) Technologie informacyjne – Wykład VII-IX Wykład VII Wykład VIII Wykład IX Algorytm Pseudokod Algorytm Gotowanie jajek na miękko I weż czysty garnek I włóż potrzebną ilość jajek I nalej zimnej wody, tak aby przykryła jajka I postaw na kuchence I zaczekaj, aż woda zcznie wrzeć I od momentu wrzenia gotuj jeszcze 2.5 minuty I wyjmij jajka, ochłodź w zimnej wodzie I jajka są gotowe do jedzenia A. Matuszak (3) Wykład VII Wykład VIII Wykład IX Technologie informacyjne – Wykład VII-IX Algorytm Pseudokod Ciąg instrukcji, operacji weź czysty garnek 2: włóż potrzebną ilość jajek 3: nalej zimnej wody, tak aby przykryła jajka 4: . . . 1: ∆ ←− b 2 −√4ac ∆ 2: x1 ←− −b− 2a 1: x2 ←− 4: . . . 3: √ −b+ ∆ 2a ... 2: Znajdź najmniejszy pierwiastek równania kwadratowego 3: . . . 1: A. Matuszak (4) Technologie informacyjne – Wykład VII-IX Wykład VII Wykład VIII Wykład IX Algorytm Pseudokod Schemat Hornera an x n + an−1 x n−1 + · · · + a2 x 2 + a1 x + a0 = (. . . ((an x + an−1 ) x + an−2 ) x + · · · + a1 ) x + a0 A. Matuszak (5) Wykład VII Wykład VIII Wykład IX Technologie informacyjne – Wykład VII-IX Algorytm Pseudokod Wyszukiwanie binarne Zgadnij liczbę z przedziału 1...100 A. Matuszak (6) Technologie informacyjne – Wykład VII-IX Wykład VII Wykład VIII Wykład IX Algorytm Pseudokod Za dużo – za mało (bisekcja) √ 3 =? 12 = 1 < 3 za mało, 22 = 4 > 3 za dużo √ 1< 3<2 połowa: 1+2 = 1.5, 1.52 = 2.25 < 3 za mało √ 2 1.5 < 3 < 2 1.5+2 = 1.75, 1.752 = 3.0625 > 3 za dużo 2 √ 1.5 < 3 < 1.75 1.5+1.75 = 1.625, 1.6252 = 2.64.. < 3 za mało 2 √ 1.625 < 3 < 1.75 1.625+1.75 = 1.6875, 1.68752 = 2.847.. < 3 za mało 2 √ 1.6875 < 3 < 1.75 1.6875+1.75 = 1.71875, . . . .... 2 A. Matuszak (7) Wykład VII Wykład VIII Wykład IX Technologie informacyjne – Wykład VII-IX Algorytm Pseudokod Sortowanie 51 5 77 35 12 15 Jedynie dwie wartości są widoczne – możliwe są różne strategie (algorytmy) Sortowanie proste (min): 51 5 X X X X X 5 77 X X X X 5 X 35 X X X 5 X X 12 X X 5 X X X 15 5 51 77 35 12 15 A. Matuszak (8) Technologie informacyjne – Wykład VII-IX Wykład VII Wykład VIII Wykład IX Algorytm Pseudokod Sortowanie I proste [ 151 5 77 35 12 15 ] [ 5 k 151 77 35 12 15 ] I przez scalanie [ 5 12 k 77 35 151 15 ] A. Matuszak (9) Wykład VII Wykład VIII Wykład IX Technologie informacyjne – Wykład VII-IX Algorytm Pseudokod ———————————————————— A. Matuszak (10) Technologie informacyjne – Wykład VII-IX Wykład VII Wykład VIII Wykład IX Algorytm Pseudokod Sito Eratostenesa 1, 1, 1, 1, 2, 2 2, 2, 3, 4, 5, 6, 7, 8, 9, , 3, 4 , 5, 6 , 7, 3 , 4 , 5, 6 , 7, 3, 4 , 5 , 6 , 7, 10, 11, 12, 13, 14, 15 8 , 9, 10 , 11, 12 , 13, 14 , 15 8 , 9 , 10 , 11, 12 , 13, 14 , 15 8 , 9 , 10 , 11, 12 , 13, 14 , 15 A. Matuszak (11) Wykład VII Wykład VIII Wykład IX Technologie informacyjne – Wykład VII-IX Algorytm Pseudokod Zapis algorytmu: pseudokod A. Matuszak (12) Technologie informacyjne – Wykład VII-IX Wykład VII Wykład VIII Wykład IX Algorytm Pseudokod Instrukcja warunkowa 1: 2: 3: 4: 5: 6: ∆ ←− b 2 − 4ac if ∆ < 0 then brak pierwiastków rzeczywistych end if if ∆ ≥ 0 then √ ∆ x1 ←− −b− 2a x2 ←− 8: end if 7: √ −b+ ∆ 2a A. Matuszak (13) Wykład VII Wykład VIII Wykład IX Technologie informacyjne – Wykład VII-IX Algorytm Pseudokod Pętle 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: while || limx→0 f (x)||∞ ≥ do ... end while ... repeat ... until warunek ... for i = 1 do n co 5 do ... end for A. Matuszak (14) Technologie informacyjne – Wykład VII-IX Wykład VII Wykład VIII Wykład IX Algorytm Pseudokod Wyszukiwanie binarne 27 1: 2: 3: 4: 5: 6: 7: 8: 9: Wyszukiwanie binarne(d,g,s) while g − d > 0 do p ←−(g+d)/2 if p > s then g ←−p else d ←−p end if end while [1 5 17 35 62 151] A. Matuszak (15) Wykład VII Wykład VIII Wykład IX Technologie informacyjne – Wykład VII-IX Algorytm Pseudokod while warunek do ... if przypadek A then ... else ... repeat ... until kryterium ... end if end while ... for i = 1 do n co 5 do ... end for A. Matuszak (16) Technologie informacyjne – Wykład VII-IX Wykład VII Wykład VIII Wykład IX Algorytm Pseudokod Algorytm Euklidesa (NWD) 1: Euklides(a,b) 2: 3: 4: 5: 6: 7: 8: 9: r ←−(a mod b) while r > 0 do a ←−b b ←−r r ←−(a mod b) end while Wynik: b A. Matuszak (17) Wykład VII Wykład VIII Wykład IX Technologie informacyjne – Wykład VII-IX Rekurencja Algorytmy rekurencyjne A. Matuszak (18) Technologie informacyjne – Wykład VII-IX Wykład VII Wykład VIII Wykład IX Rekurencja Rekurencja (Rekursja) Rekurencja albo rekursja (ang. recursion, z łac. recurrere, przybiec z powrotem) to w programowaniu i w matematyce odwoływanie się funkcji (sformułowania) do samej siebie. A. Matuszak (19) Wykład VII Wykład VIII Wykład IX Technologie informacyjne – Wykład VII-IX Rekurencja Matematyka Ciąg geometryczny Silnia xn = k · xn−1 n! = 1 · 2 · · · · · n − 1 · n n! = n · (n − 1)! A. Matuszak (20) Technologie informacyjne – Wykład VII-IX Wykład VII Wykład VIII Wykład IX Rekurencja Programowanie rekurencyjne function y=silnia(n) if (n==0)|(n==1)) y=1; else y= n*silnia(n-1); endif endfunction A. Matuszak (21) Wykład VII Wykład VIII Wykład IX Technologie informacyjne – Wykład VII-IX Rekurencja xn x0 x −p n x = x 2p+1 x 2p wykładnik potęgi 1 10 100 1000 10000 A. Matuszak (22) = 1 1 = xp = x · x 2p = (x · x)p liczba mnożeń 2 6 10 16 19 Technologie informacyjne – Wykład VII-IX Wykład VII Wykład VIII Wykład IX Rekurencja Stos 25 81 42 2 · 24 A. Matuszak (23) Wykład VII Wykład VIII Wykład IX Technologie informacyjne – Wykład VII-IX Rekurencja Ciąg Fibonacciego F (0) = 1 F (1) = 1 F (n) = F (n) = F (n − 1) + F (n − 2) A. Matuszak (24) Technologie informacyjne – Wykład VII-IX Wykład VII Wykład VIII Wykład IX function y=ifibb(n) foo=1; fo=1; f=1; for i=2:n f=foo+fo; foo=fo; fo=f; endfor y=f; endfunction Rekurencja function y=rfibb(n) if (n<2) y=1; else y=rfibb(n-1)+rfibb(n-2); endif endfunction A. Matuszak (25) Wykład VII Wykład VIII Wykład IX Technologie informacyjne – Wykład VII-IX Rekurencja Drzewo wywołań A. Matuszak (26) Technologie informacyjne – Wykład VII-IX Wykład VII Wykład VIII Wykład IX Rekurencja Każde zadanie sformułowne rekurencyjnie można zaprogramować iteracyjnie i na odwrót A. Matuszak (27) Wykład VII Wykład VIII Wykład IX Technologie informacyjne – Wykład VII-IX Dobry algorytm Złożoność algorytmu Rząd zbieżności algorytmu „Dobry” algorytm A. Matuszak (28) Technologie informacyjne – Wykład VII-IX Wykład VII Wykład VIII Wykład IX A. Matuszak (29) Wykład VII Wykład VIII Wykład IX A. Matuszak (30) Dobry algorytm Złożoność algorytmu Rząd zbieżności algorytmu Technologie informacyjne – Wykład VII-IX Dobry algorytm Złożoność algorytmu Rząd zbieżności algorytmu Technologie informacyjne – Wykład VII-IX Wykład VII Wykład VIII Wykład IX Dobry algorytm Złożoność algorytmu Rząd zbieżności algorytmu Cechy dobrego algorytmu niezawodny, zbieżny powinien zawsze dawać wyniki niezależnie od danych stabilny (numerycznie) zaburzenia w procesie rozwiązania (np. zaokrąglenia) nie powinny wpływać na wynik końcowy szybki wynik powinien być uzyskiwany jak najszybciej A. Matuszak (31) Wykład VII Wykład VIII Wykład IX Technologie informacyjne – Wykład VII-IX Dobry algorytm Złożoność algorytmu Rząd zbieżności algorytmu Zadanie z kulami Dane jest n kul identycznych co do wyglądu, z których dokładnie jedna lżejsza niż pozostałe. Mamy do dyspozycji wagę szalkową. Znaleźć lżejszą kulę używając najmniejszej możliwej liczby ważeń. A. Matuszak (32) Technologie informacyjne – Wykład VII-IX Wykład VII Wykład VIII Wykład IX Dobry algorytm Złożoność algorytmu Rząd zbieżności algorytmu Iloczyn skalarny wektorów a2 [a1 ... an ] · [b1 b2 ... bn ] T n mnożeń i n − 1 dodawań A. Matuszak (33) Wykład VII Wykład VIII Wykład IX Technologie informacyjne – Wykład VII-IX Dobry algorytm Złożoność algorytmu Rząd zbieżności algorytmu Iloczyn macierzy przez wektor a11 a21 ... an1 a12 a22 ... an2 ... ... ... ... n2 mnożeń i (n − 1)n dodawań A. Matuszak (34) x1 a1n a2n · x2 ... ... xn ann Technologie informacyjne – Wykład VII-IX Wykład VII Wykład VIII Wykład IX Dobry algorytm Złożoność algorytmu Rząd zbieżności algorytmu Schemat Hornera (znowu) an x n + an−1 x n−1 + · · · + a2 x 2 + a1 x +a0 |{z} |{z} | {z } |{z} n mnożeń 2 mnożenia n-1 mnożeń n + (n − 1) + · · · + 2 + 1 = 1 2 2 (n 1 mnożenie 1 1 (n + 1)n = n2 + n 2 2 2 + n) mnożeń i n dodawań (. . . ((an x + an−1 ) x + an−2 ) x + · · · + a1 ) x + a0 n mnożeń i n dodawań A. Matuszak (35) Wykład VII Wykład VIII Wykład IX Technologie informacyjne – Wykład VII-IX Dobry algorytm Złożoność algorytmu Rząd zbieżności algorytmu Złożoność obliczeniowa (I) Rząd złożoności: f (n) = O(g (n)) istnieje stała c : f (n) ≤ cg (n) 1 2 2n + 32 n −→ O(n2 ) Asymptotyczność oszacowania!! (algorytm Strassena mnożenia macierzy O(n log n)) A. Matuszak (36) Technologie informacyjne – Wykład VII-IX Wykład VII Wykład VIII Wykład IX Dobry algorytm Złożoność algorytmu Rząd zbieżności algorytmu (Czasowa) Złożoność obliczeniowa (II) Dominująca operacja I pesymistyczna złożoność czasowa I oczekiwana złożoność czasowa A. Matuszak (37) Wykład VII Wykład VIII Wykład IX Technologie informacyjne – Wykład VII-IX Dobry algorytm Złożoność algorytmu Rząd zbieżności algorytmu Wyszukiwanie binarne T (1) = 1 T (n) = T ( n2 ) + c Niech n = 2k (oszacowanie) T (n) = T (2k ) = T (2k−1 )+c = T (2k−2 )+c +c = · · · = T (20 )+kc k = log2 n T (n) = c log2 n + 1 O(log10 n) A. Matuszak (38) Technologie informacyjne – Wykład VII-IX Wykład VII Wykład VIII Wykład IX Dobry algorytm Złożoność algorytmu Rząd zbieżności algorytmu Popularne rzędy log n zadanie rozmiaru n zostaje sprowadzone do zadania rozmiaru n/2 plus pewna stała liczba działań n złożoność liniowa (schemat Hornera, przeszukiwanie ciągu) n log n złożoność liniowo–logarytmiczna (mergesort) n2 złożoność kwadratowa (rozwiązywanie układu równań) n3 n4 . . .np złożoności wielomianowe (odwracanie macierzy) 2n złożoność wykładnicza n! złożoność wykładnicza n! A. Matuszak (39) Wykład VII Wykład VIII Wykład IX Technologie informacyjne – Wykład VII-IX Dobry algorytm Złożoność algorytmu Rząd zbieżności algorytmu Rząd zbieżności algorytmu A. Matuszak (40) Technologie informacyjne – Wykład VII-IX Wykład VII Wykład VIII Wykład IX Dobry algorytm Złożoność algorytmu Rząd zbieżności algorytmu Rząd zbieżności algorytmu Dwa ciągi w postaci rekurencyjnej: 2 1. xn+1 = − xn5+2 xn2 +5xn +2 2xn +5 2. xn+1 = xn − = xn2 −2 2xn +5 Dla początkowego x0 = 0 oba zmierzają do tej samej granicy: √ −5 + 17 g = lim xn = ≈ −0.43847187 n→∞ 2 A. Matuszak (41) Wykład VII Wykład VIII Wykład IX n 0 1 2 3 4 5 6 7 .. 15 16 17 18 19 20 2 xn+1 = − xn5+2 0 -0.4 -0.4320000000000001 -0.4373248 -0.438250596139008 -0.4384127170032392 -0.4384411420860325 -0.4384461270147409 .. -0.4384471871902209 -0.4384471871910033 -0.4384471871911406 -0.4384471871911647 -0.4384471871911688 -0.4384471871911695 A. Matuszak (42) Technologie informacyjne – Wykład VII-IX Dobry algorytm Złożoność algorytmu Rząd zbieżności algorytmu 2 xn −2 xn+1 = 2x n +5 0 -0.4 -0.4380952380952381 -0.4384471571538546 -0.4384471871911695 Technologie informacyjne – Wykład VII-IX Wykład VII Wykład VIII Wykład IX n 0 1 2 3 4 5 6 7 .. 15 16 17 18 19 20 en = g − xn -4.384e-01 -3.845e-02 -6.447e-03 -1.122e-03 -1.966e-04 -3.447e-05 -6.045e-06 -1.060e-06 .. -9.489e-13 -1.664e-13 -2.914e-14 -5.052e-15 -8.882e-16 -1.665e-16 Dobry algorytm Złożoność algorytmu Rząd zbieżności algorytmu en = g − xn -4.384e-01 -3.845e-02 -3.519e-04 -3.004e-08 -1.665e-16 A. Matuszak (43) Wykład VII Wykład VIII Wykład IX Technologie informacyjne – Wykład VII-IX Dobry algorytm Złożoność algorytmu Rząd zbieżności algorytmu Rząd zbieżności algorytmu (II) Ciąg przybliżeń rozwiązania: x0 , x1 , x2 . . . −→ r błąd rozwiązania: en = |xn − r | zbieżność kwadratowa: en+1 ≤ C · en2 zbieżność liniowa: en+1 ≤ C · en1 A. Matuszak (44) Technologie informacyjne – Wykład VII-IX Wykład VII Wykład VIII Wykład IX Dobry algorytm Złożoność algorytmu Rząd zbieżności algorytmu Koszt flops: Floating Point OperationS (Floating Points Operations per Second) ciąg 1: ciąg 2: 20 × 3 = 60 flops 4 × 5 = 20 flops A. Matuszak (45) Technologie informacyjne – Wykład VII-IX