CZY WSZYSTKO MONA POLICZY NA KOMPUTERZE WSTP DO






















































- Slides: 54
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 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ę 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 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. Watson, IBM, 1948 informatyka + 6
Rozwój elektroniki informatyka + 7
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 – 5 k. OPS Z 3, 1941 – 20 OPS (oper/sek. ) informatyka + 9
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 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 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 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 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 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 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 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 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 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 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 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, 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 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 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, 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 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 : 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ć 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 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 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 cm Skala 12 m informatyka + 31
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 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 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ść 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 – 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: • 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? 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, 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 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 + … + 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 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 + 43
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 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 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 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 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 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 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 Gomory, IBM] 51
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: • 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