CZY WSZYSTKO MONA POLICZY NA KOMPUTERZE WSTP DO

  • Slides: 54
Download presentation

CZY WSZYSTKO MOŻNA POLICZYĆ NA KOMPUTERZE WSTĘP DO ZŁOŻONOŚCI OBLICZENIOWEJ Maciej M. Sysło Uniwersytet

CZY WSZYSTKO MOŻNA POLICZYĆ NA KOMPUTERZE WSTĘP DO ZŁOŻONOŚCI OBLICZENIOWEJ Maciej M. Sysło Uniwersytet Wrocławski Uniwersytet UMK w Toruniu syslo@ii. uni. wroc. pl informatyka + 2

Algorytm, algorytmika Algorytm – opis rozwiązania krok po kroku postawionego problemu lub sposobu osiągnięcia

Algorytm, algorytmika Algorytm – opis rozwiązania krok po kroku postawionego problemu lub sposobu osiągnięcia jakiegoś celu Pierwszy algorytm – algorytm Euklidesa 300 p. n. e algorytm od Muhammad ibn Musa al-Chorezmi IX w. Algorytmika – dziedzina zajmująca się algorytmami i ich własnościami informatyka + 3

Algorytmy a informatyka Informatyka – jedna z definicji: dziedzina wiedzy i działalności zajmująca się

Algorytmy a informatyka Informatyka – jedna z definicji: dziedzina wiedzy i działalności zajmująca się algorytmami Donald E. Knuth: Mówi się często, że człowiek dotąd nie zrozumie czegoś, zanim nie nauczy tego – kogoś innego. W rzeczywistości, człowiek nie zrozumie czegoś (algorytmu) naprawdę, zanim nie zdoła nauczyć tego – komputera. Ralf Gomory (IBM): Najlepszym sposobem przyspieszania komputerów jest obarczanie ich mniejszą liczbą działań (szybszymi algorytmami) informatyka + 4

Czy wszystko można policzyć na komputerze Plan: • Superkomputery, superkomputery a algorytmy • Przykłady

Czy wszystko można policzyć na komputerze Plan: • Superkomputery, superkomputery a algorytmy • Przykłady trudnych problemów – – szukanie trasy objazdu podnoszenie do potęgi badanie złożoności liczb porządkowanie (? ) • Problemy, które mają efektywne algorytmy – – problemy przeszukiwania zbioru problemy wyszukiwania w zbiorach nieuporządkowanych i uporządkowanych schemat Hornera porządkowanie • Znaczenie zasady dziel i zwyciężaj • Problemy trudne, ponownie informatyka + 5

IBM – początki dużych komputerów Nie będą potrzebne duże komputery, najwyżej 5, Thomas J.

IBM – początki dużych komputerów Nie będą potrzebne duże komputery, najwyżej 5, Thomas J. Watson, IBM, 1948 informatyka + 6

Rozwój elektroniki informatyka + 7

Rozwój elektroniki informatyka + 7

Jednostki szybkości komputerów FLOPS (FLoting point Operations Per Second) – liczba operacji zmiennopozycyjnych (+/–,

Jednostki szybkości komputerów FLOPS (FLoting point Operations Per Second) – liczba operacji zmiennopozycyjnych (+/–, *, / na liczbach rzeczywistych) na sekundę KFlops (kilo flops) – 103 MFlops (mega flops) – 106 GFlops (giga flops) – 109 TFlops (tera flops) – 1012 PFlops (peta flops) – 1015 EFlops (exa flops) – 1018 ZFlops (zetta flops) – 1021 YFlops (yotta flops) – 1024 Zakładamy, że dysponujemy komputerem o mocy 1 PFlops, 1 000 000 000 op/sek informatyka + 8

Superkomputery, 1 – początki Superkomputer – najszybszy komputer w danej chwili Colossus, 1943 –

Superkomputery, 1 – początki Superkomputer – najszybszy komputer w danej chwili Colossus, 1943 – 5 k. OPS Z 3, 1941 – 20 OPS (oper/sek. ) informatyka + 9

Superkomputery, 2 – ostatnie lata Seymour Cray (1925 -1996) Earth Simulator (2002) – 35

Superkomputery, 2 – ostatnie lata Seymour Cray (1925 -1996) Earth Simulator (2002) – 35 TFlops Cray-1 (1976) – 250 MFlops IBM Blue Gine/L; 2005 – 180 TFlops 2007 – 478 TFlops informatyka + 10

Superkomputery, 3 – stan z 2010 1 st. Jaguar Cray XT – 1. 759

Superkomputery, 3 – stan z 2010 1 st. Jaguar Cray XT – 1. 759 PFlops 224162 procesory Opteron AMD 2 nd. Roadrunner IBM 1. 105 PFlops macierz procesorów 136 th. Galera, TASK, Gdańsk 50 TFlops Byłby 1 st. w 2003 roku informatyka + 11

Superkomputery, 4 – stan z 2010 Najszybszy procesor PC – Intel Core i 7

Superkomputery, 4 – stan z 2010 Najszybszy procesor PC – Intel Core i 7 980 XE – 107. 6 GFlops Rozproszone komputery – GIMPS (najw. l. pierwsze) – 44 TFlops Google – 300 TFlops Folding@home (proteiny) – 3. 8 PFlops Przyszłość (przewidywania): 2010: 1 EFlops (1018) – Cray (? ) 2019: 1 EFlops (1018) 2030: 1 ZFlops (1021) – przewidywanie pogody na 2 tygodnie informatyka + 12

Superkomputery i algorytmy Algorytmy o różnej złożoności, dla danych o różnych rozmiarach wykonywane na

Superkomputery i algorytmy Algorytmy o różnej złożoności, dla danych o różnych rozmiarach wykonywane na superkomputerze o mocy 1 PFlops (1015). Algorytmy w dwóch ostatnich wierszach: • odpowiadają rzeczywistym problemom • zwiększenie mocy komputerów niewiele pomoże • cała nadzieja w szybkich algorytmach Algorytmy wielomianowe (5 pierwszych wierszy) i niewielomianowe. informatyka + 13

Problemy trudne, 1 – najkrótsza trasa premiera Problem: Znajdź najkrótszą trasę dla Premiera przez

Problemy trudne, 1 – najkrótsza trasa premiera Problem: Znajdź najkrótszą trasę dla Premiera przez wszystkie miasta wojewódzkie. Rozwiązanie: Premier zaczyna w Stolicy a inne miasta może odwiedzać w dowolnej kolejności. Tych możliwości jest: 15*14*13*12*11*…*2*1 = 15! (15 silnia) W 1990 roku było: 48*47*46*…*2*1 = 48! (48 silnia) informatyka + 14

Problemy trudne, 1 – najkrótsza trasa premiera Wartości funkcji n! Rosną BARDZO SZYBKO Prezydent

Problemy trudne, 1 – najkrótsza trasa premiera Wartości funkcji n! Rosną BARDZO SZYBKO Prezydent Stanów Zjednoczonych ma problem ze znalezieniem najkrótszej trasy objazdu Stanów. Na superkomputerze o mocy 1 PFlops – ile trwa obliczanie n! 15! = 1307674368000/1015 sek. = ok. 0. 01 sek. 48! = 1, 2413915592536072670862289047373*1061/1015 = 3*1038 lat 25! = 15511210043330985984000000/1015 sek. = 15511210043 sek. = = 179528 dni = 491 lat informatyka + 15

Problemy trudne, 1 – najkrótsza trasa premiera Trudno sprawdzić, jak dobre jest to rozwiązanie

Problemy trudne, 1 – najkrótsza trasa premiera Trudno sprawdzić, jak dobre jest to rozwiązanie w stosunku do najlepszego, bo go nie znamy. Zły wybór Algorytmy przybliżone szukania rozwiązań: 1. Metoda zachłanna – najbliższy sąsiad – mogą być bardzo złe 2. Meta-heurystyki: • algorytmy genetyczne – krzyżowanie i mutowanie rozwiązań • algorytmy mrówkowe – modelowanie feromonów informatyka + 16

Problemy trudne, 2 – liczby pierwsze Problemy dotyczące liczb pierwszych: 1. Dana jest liczba

Problemy trudne, 2 – liczby pierwsze Problemy dotyczące liczb pierwszych: 1. Dana jest liczba n – czy n jest liczbą pierwszą (złożoną)? Istnieją teoretycznie efektywne algorytmy, ale gdy n złożona, to nie dają rozkładu na czynniki Istnieją szybkie algorytmy probabilistyczne – odpowiedź jest poprawna z prawdopodobieństwem np. 1 – 1/2100 2. Dana jest liczba n – rozłóż n na czynniki Nie jest znana szybka metoda – dobrze dla kryptografii: Klucze RSA: (n, e) – publiczny, (n, d) – prywatny. n – jest znane, i wiadomo, że n = p*q, p, q – pierwsze informatyka + 17

Szyfr RSA Ciekawa – Ewa Tekst jawny M Nadawca – Alicja Odbiorca – Bogdan

Szyfr RSA Ciekawa – Ewa Tekst jawny M Nadawca – Alicja Odbiorca – Bogdan Klucz publiczny: n, e Klucz prywatny: n, d Algorytm szyfrujący P=Me mod n Tekst zaszyfrowany P Liczby: n = p*q, p, q – duże liczby pierwsze e – względnie pierwsza z (p – 1)(q – 1) d – spełnia e*d = 1 mod (p – 1)(q – 1) . Algorytm deszyfrujący M=Pd mod n Tekst jawny M Bezpieczeństwo szyfru RSA – nawet najmocniejszy komputer nie jest w stanie znaleźć d, znając n i e, gdy nie zna rozkładu n = p*q Działania (przy szyfrowaniu): Podnoszenie dużych liczb do dużych potęg i branie reszty z dzielenia (mod) informatyka + 18

Problemy trudne, 2 – liczby pierwsze Problemy dotyczące liczb pierwszych: 3. Dana jest liczba

Problemy trudne, 2 – liczby pierwsze Problemy dotyczące liczb pierwszych: 3. Dana jest liczba n – znajdź wszystkie liczby pierwsze mniejsze od n – sito Eratosthenesa – raczej ciekawostka, mało praktyczna 4. Poszukiwanie największych liczb pierwszych Największa znana liczba pierwsza (liczba Mersenne’a): 243112609 – 1 Zawiera: 12 978 189 cyfr. Zajmuje 3461 stron. Serwis internetowy: http: //www. mersenne. org/ Great Internet Mersenne Prime Search (GIMPS) – moc 44 TFlops informatyka + 19

Problemy trudne, 3 – podnoszenie do potęgi Kryptografia: Szyfr RSA bazuje na podnoszeniu do

Problemy trudne, 3 – podnoszenie do potęgi Kryptografia: Szyfr RSA bazuje na podnoszeniu do dużej potęgi dużych liczb, np. 123456789098765432112345678998765 432112345678909876543211234567890987654321 Jak można szybko obliczać takie potęgi? Algorytm szkolny: xn = x*x*x* … * x Obliczenie małej potęgi: trwałoby: n – 1 mnożeń x 12345678912345678912345 3*108 lat informatyka + 20

Problemy trudne, 4 – porządkowanie Problem porządkowania (sortowania) Dane: Liczba naturalna n i ciąg

Problemy trudne, 4 – porządkowanie Problem porządkowania (sortowania) Dane: Liczba naturalna n i ciąg n liczb x 1, x 2, . . . , xn Wynik: Uporządkowanie tego ciągu liczb od najmniejszej do największej Przestrzeń możliwych rozwiązań: n! – możliwych permutacji Ale znamy algorytmy wykonujące: n 2 lub n log n porównań informatyka + 21

Proste problemy i ich efektywne algorytmy Problemy, które są bardzo często rozwiązywane przez komputery,

Proste problemy i ich efektywne algorytmy Problemy, które są bardzo często rozwiązywane przez komputery, więc potrzebne są szybkie algorytmy: 1. Poszukiwanie elementów w zbiorze uporządkowanym 2. Znajdowanie najmniejszego/największego elementu 3. Znajdowanie drugiego największego elementu w zbiorze 4. Jednoczesne znajdowanie minimum i maksimum 5. Porządkowanie elementów 6. Obliczanie wartości wielomianu – Schemat Hornera informatyka + 22

Poszukiwanie elementu w zbiorze Problem poszukiwania elementu w zbiorze – specyfikacja Dane: Zbiór elementów

Poszukiwanie elementu w zbiorze Problem poszukiwania elementu w zbiorze – specyfikacja Dane: Zbiór elementów w postaci ciągu n liczb x 1, x 2, . . . , xn. Wyróżniony element y Wynik: Jeśli y należy do tego zbioru, to podaj jego miejsce (indeks) w ciągu, a w przeciwnym razie – sygnalizuj brak takiego elementu w zbiorze – wstaw y do ciągu Dwa przypadki: • Nieuporządkowany ciąg liczb x 1, x 2, . . . , xn • Uporządkowany ciąg liczb x 1, x 2, . . . , xn Nasz cel: Jakie są korzyści z uporządkowania? Jak utrzymywać porządek wśród informacji? informatyka + 23

Poszukiwanie elementu w zbiorze – przykład Przeszukiwanie książki telefonicznej Poszukiwanie numeru telefonu danej osoby

Poszukiwanie elementu w zbiorze – przykład Przeszukiwanie książki telefonicznej Poszukiwanie numeru telefonu danej osoby Dane: Nazwiska, adresy, numery telefonów … – książka telefoniczna. ami k s i w z ie na n Ciąg danych x 1, x 2, . . . , xn – kartki książki z danymi o numerach z c y t lfabe a a n a kow Wyróżniony element y – nazwisko osoby, której numeru szukamy d ą z r o a up n z c i n o Wynik: Jeśli osoba y ma numer telefony w książce, to podaj na której telef a k ż ą i Ksstronie, a w przeciwnym razie – sygnalizuj brak danych o y Poszukiwanie osoby o danym numerze telefonu Dane: Książka telefoniczna. mi a r e m u nie n z Ciąg danych x 1, x 2, . . . , xn – kartki książki z danymi o numerach c y t e alfab a n a w Wyróżniony element y u– numer telefonu osoby, której szukamy ądko z r o p a nie n z c i n Wynik: Jeśli istnieje osoba z numerem telefonu y, to podaj jej nazwisko, lefo e t a k ż ią Ksa w przeciwnym razie – sygnalizuj brak takiej osoby informatyka + 24

Poszukiwania w zbiorze nieuporządkowanym Algorytm – Poszukiwanie liniowe Krok 1. Dla i = 1,

Poszukiwania w zbiorze nieuporządkowanym Algorytm – Poszukiwanie liniowe Krok 1. Dla i = 1, 2, . . . , n, jeśli xi = y, to przejdź do kroku 3. Krok 2. Komunikat: W ciągu danych nie ma elementu równego y. Zakończ algorytm: – wynik: – 1 Krok 3. Element równy y znajduje się na miejscu i w ciągu danych. Zakończ algorytm: wynik: i Przykład: Dane: ciąg: 2, 5, 1, 4, 10, 7. y = 1 Wynik: i = 3 Pewna niedogodność – sprawdzanie, czy koniec ciągu. begin i: =1; while (x[i]<>y) and (i<n) do i: =i+1; if x[i]=y then Przeszukiwanie. Liniowe: =i else Przeszukiwanie. Liniowe: =-1 end informatyka + 25

Poszukiwania w zbiorze nieuporządkowanym z wartownikiem Algorytm – Poszukiwanie liniowe z wartownikiem Takie same

Poszukiwania w zbiorze nieuporządkowanym z wartownikiem Algorytm – Poszukiwanie liniowe z wartownikiem Takie same kroki algorytmu inna implementacja, czyli komputerowa realizacja: na końcu ciągu: x 1 x 2 x 3 x 4 … xn xn+1 wstawiamy wartownika – pilnuje końca ciągu begin i: =1; Nie ma sprawdzania, x[n+1]: =y; czy koniec ciągu while x[i]<>y do i: =i+1; if i<=n then Przeszukiwanie. Liniowe. Wartownik: =i else Przeszukiwanie. Liniowe. Wartownik: =-1 end informatyka + 26

Poszukiwanie w zbiorze uporządkowanym Zabawa w zgadywanie liczby Zgadywana liczba: 17 w przedziale [1

Poszukiwanie w zbiorze uporządkowanym Zabawa w zgadywanie liczby Zgadywana liczba: 17 w przedziale [1 : 20] Metoda: połowienia przedziału Kolejne kroki: strzałka wskazuje wybór; kolor czerwony – ciąg do przeszukania: !!! 0 2 t s ia o p 5 n w ró m a z ań informatyka + 27

Poszukiwanie przez połowienie Złożoność (1) Liczba kroków w algorytmie połowienia: Ile razy należy przepołowić

Poszukiwanie przez połowienie Złożoność (1) Liczba kroków w algorytmie połowienia: Ile razy należy przepołowić ciąg o danej długości, aby znaleźć element lub miejsce dla niego? Przykład dla n = 1200 Kolejne długości ciągu: 1200, 600, 300, 150, 75, 38, 19, 10, 5, 3, 2, 1 11 razy dzielono ciąg o długości 1200, by pozostał 1 element Liczba porównań w algorytmach poszukiwania dla n = 1200: • przez połowienie • liniowy 11 1200 informatyka + Porównaj, jaka jest potęga uporządkowania !!! 28

Poszukiwanie przez połowienie złożoność (2) Dla n = 1200 liczba porównań w algorytmie połowienia

Poszukiwanie przez połowienie złożoność (2) Dla n = 1200 liczba porównań w algorytmie połowienia wyniosła 11 Pytania: • Jak liczba porównań zależy od n? • Jak dobry jest to algorytm? Liczba porównań dla różnych n: n liczba porównań 100 1 000 10 000 100 000 1 000 10 000 7 10 14 17 20 24 Algorytm poszukiwania przez połowienie jest optymalny, czyli najszybciej przeszukuje zbiory uporządkowane. Funkcja logarytm, bardzo ważna w algorytmice ok. log 2 n informatyka + logarytm to anagram od algorytm 29

Poszukiwanie interpolacyjne function Przeszukiwanie. Binarne(x: tablicax; k, l: integer; y: integer): integer; {Przeszukiwanie binarne

Poszukiwanie interpolacyjne function Przeszukiwanie. Binarne(x: tablicax; k, l: integer; y: integer): integer; {Przeszukiwanie binarne ciagu x[k. . l] w poszukiwaniu elementu y. } var Lewy, Prawy, Srodek: integer; Srodek = lewy + (prawy – lewy)/2 begin Lewy: =k; Prawy: =l; Srodek = lewy + while Lewy<=Prawy do begin (y – x[lewy])(prawy – lewy)/(x[prawy] – x[lewy]) Srodek: =(Lewy+Prawy) div 2; if x[Srodek]=y then begin Przeszukiwanie. Binarne: =Srodek; exit end; {element y nalezy do przeszukiwanego ciagu} if x[Srodek]<y then Lewy: =Srodek+1 else Prawy: =Srodek-1 end; Przeszukiwanie. Binarne: =-1 Przeciętny czas interpolacyjnego end umieszczania wynosi ok. log n informatyka + 30

Suwaki logarytmiczne Na wyposażeniu każdego inżyniera do 1972 roku Skala 30 cm Skala 150

Suwaki logarytmiczne Na wyposażeniu każdego inżyniera do 1972 roku Skala 30 cm Skala 150 cm Skala 12 m informatyka + 31

Znajdowanie elementu w zbiorze Znajdź w zbiorze element o pewnych własnościach: • najwyższego ucznia

Znajdowanie elementu w zbiorze Znajdź w zbiorze element o pewnych własnościach: • najwyższego ucznia w swojej klasie – metoda spaghetti • jak zmieni się Twój algorytm, jeśli chciałbyś znaleźć w klasie najniższego ucznia • znajdź w swojej klasie ucznia, któremu droga do szkoły zabiera najwięcej czasu • znajdź najstarszego (lub najmłodszego) ucznia w swojej szkole • znajdź największą kartę w potasowanej talii kart • znajdź najlepszego tenisistę w swojej klasie – nie ma remisów • znajdź najlepszego gracza w warcaby w swojej klasie – możliwe są remisy Podstawowa operacja – porównanie: • dwóch liczb lub kombinacji liczb (data, karty): • dwóch zawodników: informatyka + czy x < y ? rozegranie meczu 32

Znajdowanie elementu w zbiorze Różnica między dwoma problemami: Czy zbiór zawiera y? Dane: Ciąg

Znajdowanie elementu w zbiorze Różnica między dwoma problemami: Czy zbiór zawiera y? Dane: Ciąg n liczb x 1, x 2, . . . , xn Wyróżniony element y Wynik: Czy w ciągu jest element y ? Znajdź w zbiorze element o pewnych własnościach Dane: Ciąg n liczb x 1, x 2, . . . , xn Wynik: Najmniejsza wśród liczb x 1, x 2, . . . , xn Przeszukujemy ciąg aż znajdziemy y, Przeglądamy cały ciąg, by stwierdzić, że nie zawiera y. Trzeba przejrzeć cały ciąg. Zakładamy, że ciąg nie jest uporządkowany. Uporządkowanie ciągu ułatwia. informatyka + 33

Specyfikacja problemu – dokładne opisanie problemu Problem Min – Znajdowanie najmniejszego elementu w zbiorze

Specyfikacja problemu – dokładne opisanie problemu Problem Min – Znajdowanie najmniejszego elementu w zbiorze Dane: Liczba naturalna n i zbiór n liczb dany w ciągu x 1, x 2, . . . , xn Wynik: Najmniejsza wśród liczb x 1, x 2, . . . , xn – oznaczmy ją min Metoda rozwiązania: przeszukiwanie liniowe – od lewej do prawej Algorytm Min – Znajdowanie najmniejszego elementu w zbiorze Krok 1. Przyjmij za min pierwszy element w zbiorze (w ciągu), imin : = 1 czyli przypisz min : = x 1. Krok 2. Dla kolejnych elementów xi, gdzie i = 2, 3, . . . , n, imin : = i jeśli min > xi, to przypisz min : = xi. Algorytm Max – prosta modyfikacja: zamiana > na < Wyznaczanie imin – indeksu elementu o wartości min informatyka + 34

Pracochłonność algorytmu Min • Porównanie – podstawowa operacja w algorytmie Min. • Pracochłonność (złożoność

Pracochłonność algorytmu Min • Porównanie – podstawowa operacja w algorytmie Min. • Pracochłonność (złożoność obliczeniowa) algorytmu – liczba podstawowych operacji wykonywanych przez algorytm. • Pytanie: Ile porównań wykonuje algorytm Min? • Odpowiedź: o jedno mniej niż jest elementów, czyli n – 1 Pytania: • Czy można szybciej? • Czy istnieje szybszy algorytm znajdowania min? • A może metoda pucharowa wyłaniania zwycięzcy w turnieju jest szybsza? informatyka + 35

Wyłanianie najlepszego zawodnika w turnieju czyli inny sposób znajdowania max (lub min) Porównania –

Wyłanianie najlepszego zawodnika w turnieju czyli inny sposób znajdowania max (lub min) Porównania – mecze Tome k Ośmiu zawodników: 7 meczy n zawodników: n – 1 meczy a więc nie jest szybsza Tome k Bartek Romek Witek Bolek Witek Tome k Zenek informatyka + Jednak jest szybciej. Gdy liczmy równolegle Tolek Felek 36

A może mamy algorytm najlepszy? Podsumowanie: Mamy dwa algorytmy znajdowania min lub max: •

A może mamy algorytm najlepszy? Podsumowanie: Mamy dwa algorytmy znajdowania min lub max: • przeszukiwanie liniowe • rozegranie turnieju które na zbiorze n elementów wykonują n – 1 porównań Może nie ma szybszego algorytmu? TAK! Hugo Steinhaus tak to uzasadnił: Jeśli Tomek jest zwycięzcą turnieju, w którym startuje n zawodników, to każdy inny spośród n – 1 zawodników musiał przegrać przynajmniej raz, a zatem rozegrano przynajmniej n – 1 meczy. Zatem każdy algorytm musi wykonać przynajmniej n – 1 porównań, czyli nasze algorytmy są najszybsze – są optymalne. informatyka + 37

A jak znaleźć drugiego najlepszego zawodnika w turnieju? Tome k Czy jest nim Bartek?

A jak znaleźć drugiego najlepszego zawodnika w turnieju? Tome k Czy jest nim Bartek? Bo przegrał z Tomkiem? Ale Bartek nie grał z drugą połową! Tome ? ? ? k Bartek Romek Witek Bolek Witek ? ? ? Tome k Zenek informatyka + Tylko dwa dodatkowe mecze! Tolek Felek 38

Jednoczesne znajdowanie min i max Obserwacja: jeśli x y, to x kandydatem na min,

Jednoczesne znajdowanie min i max Obserwacja: jeśli x y, to x kandydatem na min, a y kandydatem na max Algorytm „dziel i zwyciężaj”: Krok 1. Podział na kandydatów na min i kandydatów na max Kandydaci na max Porównania parami Kandydaci na min 3 2 5 8 5 ↑ ↑ ↑ ↑ 3 1 2 2 5 3 4 8 2 5 3 ? 1 2 ? 2 5 ? 3 4 ? 8 2 ? 5 ↓ ↓ ↓ ↓ 2 1 2 3 4 max = 8 min = 1 Krok 2. Znajdź min i max Liczba porównań: • algorytm naiwny: n – 1 (min) + n – 2 (max) = 2 n – 3 • algorytm dziel i zwyciężaj: n/2(podział)+ (n/2– 1)(min) + (n/2– 1)(max) ok. 3 n/2 – 2 – jest to algorytm optymalny informatyka + 39

Problem porządkowania (sortowania) Dane: Liczba naturalna n i ciąg n liczb x 1, x

Problem porządkowania (sortowania) Dane: Liczba naturalna n i ciąg n liczb x 1, x 2, . . . , xn Wynik: Uporządkowanie tego ciągu liczb od najmniejszej do największej Algorytm: porządkowanie przez wybór – Selection Sort Idea: najmniejszy wśród nieuporządkowanych daj na początek Krok 1. Dla i = 1, 2, . . . , n – 1 wykonaj kroki 2 i 3, a następnie zakończ algorytm Krok 2. Znajdź k takie, że xk jest najmniejszym elementem w ciągu xi, . . . , xn Krok 3. Zamień miejscami elementy xi oraz xk informatyka + 40

Złożoność porządkowania przez wybór Liczba zamian elementów w kolejnych krokach: 1 + 1 +

Złożoność porządkowania przez wybór Liczba zamian elementów w kolejnych krokach: 1 + 1 + … + 1 = n – 1 Liczba porównań w kolejnych krokach: (n – 1) + (n – 2) + (n – 3) + … + 3 + 2 + 1 = ? Przykład n = 6 Pole prostokąta: 5 x 6 Suma = pole czarnych diamentów: 5 x 6 4 2 3 2 1 5 = n – 1 6 = n informatyka + Ogólnie suma: (n – 1) x n 2 Liczby trójkątne 41

Sortowanie przez scalanie – scalanie Scalanie – z dwóch uporządkowanych ciągów utwórz jeden uporządkowany

Sortowanie przez scalanie – scalanie Scalanie – z dwóch uporządkowanych ciągów utwórz jeden uporządkowany Algorytm scalania. Scal. Dane: dwa ciągi uporządkowane Wynik: scalony ciąg uporządkowany Krok: do tworzonego ciągu pobieraj najmniejszy element z czoła scalanych ciągów Scalanie 1 3 5 7 10 12 1 2 6 9 11 15 17 20 Scalony ciąg Scalane ciągi 1 3 5 7 10 12 1 2 6 9 11 15 17 20 1 1 2 3 5 6 7 9 10 11 12 15 17 20 informatyka + 42

Sortowanie przez scalanie – scalanie Scalane ciągi Scalone ciągi, w innym miejscu informatyka +

Sortowanie przez scalanie – scalanie Scalane ciągi Scalone ciągi, w innym miejscu informatyka + 43

Sortowanie przez scalanie – opis Metoda dziel i zwyciężaj Rekurencyjne wywołania na podciągach Algorytm

Sortowanie przez scalanie – opis Metoda dziel i zwyciężaj Rekurencyjne wywołania na podciągach Algorytm porządkowania przez scalanie Merge. Sort(l, p, x) Dane: Ciąg liczb xl, xl+1, …, xp Wynik: Uporządkowanie tego ciągu liczb od najmniejszej do największej. Krok 1. Jeśli l < p, to przyjmij s: =(l+p) div 2 i wykonaj trzy następne kroki. { s w połowie ciągu} Krok 2. Merge. Sort(l, s, x) – sortowanie pierwszej połowy ciągu Krok 3. Merge. Sort(s+1, p, x) – sortowanie drugiej połowy ciągu Krok 4. Zastosuj algorytm Scal do ciągów (xl, …, xs) i (xs+1, …, xp) i wynik umieść w ciągu (xl, …, xp). informatyka + 44

Sortowanie przez scalanie DEMO 2 1 2 9 5 0 dziel 2 1 9

Sortowanie przez scalanie DEMO 2 1 2 9 5 0 dziel 2 1 9 5 2 dziel 1 2 0 5 9 scal 1 2 2 scal 0 5 9 0 1 2 2 5 9 informatyka + 45

Sortowanie przez scalanie DEMO Posortowana jest już pierwsza połowa ciągu i w trakcie sortowania

Sortowanie przez scalanie DEMO Posortowana jest już pierwsza połowa ciągu i w trakcie sortowania drugiej połowy, scalane są dwa podciągi z pierwszej części drugiej połowy, uporządkowane wcześniej rekurencyjnie tą samą metodą Posortowana pierwsza połowa ciągu Scalane ciągi Wynik scalania dodatkowym miejscu informatyka + 46

Proste problemy i ich efektywne algorytmy 1. Poszukiwanie elementów w zbiorze: – – nieuporządkowanym

Proste problemy i ich efektywne algorytmy 1. Poszukiwanie elementów w zbiorze: – – nieuporządkowanym n porównań n log n optymalny 2. Znajdowanie najmniejszego/największego elementu – n – 1 porównań optymalny 3. Znajdowanie pierwszego i drugiego największego elementu w zbiorze – n + log 2 n – 2 optymalny 4. Jednoczesne znajdowanie minimum i maksimum – 3 n/2 – 2 optymalny 5. Porządkowanie elementów – n 2 – przez wybór; n log n – przez scalanie – optymalny 6. Schemat Hornera – n mnożeń i n dodawań informatyka + optymalny 47

Problemy trudne, 2 – liczby pierwsze, ponownie Problemy dotyczące liczb pierwszych: 1. Dana jest

Problemy trudne, 2 – liczby pierwsze, ponownie Problemy dotyczące liczb pierwszych: 1. Dana jest liczba n – czy n jest liczbą pierwszą (złożoną)? 2. Dana jest liczba n – rozłóż n na czynniki Algorytm kolejnego dzielenia: i : = 2; while i*i <= n do begin if n mod i = 0 then return 1 {n dzieli się przez i} i : = i + 1 end; Szyfr RSA jest return 0 {n jest liczbą pierwszą} bezpieczny! Złożoność: n 1/2 mnożeń (*) i dzieleń (mod) Wniosek: jeśli liczba jest np. 10200, to złożoność 10100 – to trwałoby lata nawet na Cray informatyka + 48

Problemy trudne, 3 – podnoszenie do potęgi, again Kryptografia: Chcemy obliczać: 123456789098765432112345678998765432112 3456789012345678909876543211234567890987654321 Algorytm

Problemy trudne, 3 – podnoszenie do potęgi, again Kryptografia: Chcemy obliczać: 123456789098765432112345678998765432112 3456789012345678909876543211234567890987654321 Algorytm szkolny: xn = x*x*x* … * x n – 1 mnożeń Obliczenie małej potęgi: x 12345678912345678912345 – 3*108 lat Algorytm rekurencyjny, korzysta ze spostrzeżenia: § jeśli m jest parzyste, to xm = (xm/2)2 § jeśli m jest nieparzyste, to xm = (xm – 1)x (m – 1 staje się parzyste). Przykład: m = 22 x 22 = (x 11)2 = ((x 10) x)2 = ((x 5)2 x)2 = (((x 4)x)2 x)2 = (((x 2)2 x)2 x)2 = x 22 § Kolejne mnożenia: x 2, x 4 = (x 2)2, x 5 = (x 4)x, x 10 = (x 5)2, x 10 x = x 11, (x 11)2 = x 22 Liczba mnożeń: 6 zamiast 21 informatyka + 49

Podnoszenie do potęgi – łatwy problem Potega(x, n) { xn } if n=1 then

Podnoszenie do potęgi – łatwy problem Potega(x, n) { xn } if n=1 then Potega: =x else if n – parzyste then Potega: =Potega (x, n/2)^2 else Potega: =Potega (x, n– 1)*x {xn = (xn/2)2} {xn = (xn– 1)x} Złożoność (liczba mnożeń): liczba bitów w rozwinięciu n – podnoszenie do kwadratu – ok. log 2 n plus liczba jedynek w rozwinięciu n – mnożenie przez x – nie więcej niż log 2 n Razem: nie więcej niż 2*log 2 n Długość rozwinięcia binarnego liczb: A zatem, obliczenie x 1234567890123456789012345 algorytmem rekurencyjnym to ok. … 200 mnożeń informatyka + 50

Konkluzja Najlepszym sposobem przyspieszania komputerów jest obarczanie ich mniejszą liczbą działań (szybszymi algorytmami) [Ralf

Konkluzja Najlepszym sposobem przyspieszania komputerów jest obarczanie ich mniejszą liczbą działań (szybszymi algorytmami) [Ralf Gomory, IBM] 51

Pokrewne zajęcia w Projekcie Informatyka + Wykład+Warsztaty (Wszechnica Poranna): • Wprowadzenie do algorytmiki i

Pokrewne zajęcia w Projekcie Informatyka + Wykład+Warsztaty (Wszechnica Poranna): • Wprowadzenie do algorytmiki i programowania – wyszukiwanie i porządkowanie informacji • Proste rachunki wykonywane za pomocą komputera. • Techniki algorytmiczne – przybliżone (heurystyczne) i dokładne. Wykłady (Wszechnica Popołudniowa): • Czy wszystko można policzyć na komputerze? • Porządek wśród informacji kluczem do szybkiego wyszukiwania. • Dlaczego możemy się czuć bezpieczni w sieci, czyli o szyfrowaniu informacji. • Znajdowanie najkrótszych dróg, najniższych drzew, najlepszych małżeństw informatyka + 52

Pokrewne zajęcia w Projekcie Informatyka + Kursy (24 godz. ) – Wszechnica na Kołach:

Pokrewne zajęcia w Projekcie Informatyka + Kursy (24 godz. ) – Wszechnica na Kołach: • Algorytmy poszukiwania i porządkowania. Elementy języka programowania • Różnorodne algorytmy obliczeń i ich komputerowe realizacje • Grafy, algorytmy grafowe i ich komputerowe realizacje Kursy (24 godz. ) – Kuźnia Informatycznych Talentów – KIT dla Orłów: • Przegląd podstawowych algorytmów • Struktury danych i ich wykorzystanie • Zaawansowane algorytmy Tendencje – Wykłady • Algorytmy w Internecie, K. Diks • Czy P = NP, czyli jak wygrać milion dolarów w Sudoku, J. Grytczuk • Między przeszłością a przyszłość informatyki, M. M Sysło informatyka + 53