1 / 54

CZY WSZYSTKO MOŻNA POLICZYĆ NA KOMPUTERZE WSTĘP DO ZŁOŻONOŚCI OBLICZENIOWEJ

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. Algorytm, algorytmika. Algorytm – opis rozwiązania krok po kroku postawionego problemu lub sposobu osiągnięcia jakiegoś celu

oleg
Télécharger la présentation

CZY WSZYSTKO MOŻNA POLICZYĆ NA KOMPUTERZE WSTĘP DO ZŁOŻONOŚCI OBLICZENIOWEJ

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CZY WSZYSTKO MOŻNA POLICZYĆ NA KOMPUTERZEWSTĘ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-ChorezmiIX 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 (exaflops) – 1018 ZFlops (zettaflops) – 1021 YFlops (yottaflops) – 1024 Zakładamy, że dysponujemy komputerem o mocy 1 PFlops, 1 000 000 000 000 000 op/sek informatyka +

  8. Superkomputery, 1 – początki Superkomputer – najszybszy komputer w danej chwili Colossus, 1943 – 5 kOPS Z3, 1941 – 20 OPS (oper/sek.) informatyka +

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

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

  11. Superkomputery, 4 – stan z 2010 Najszybszy procesor PC – Intel Core i7 980XE – 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ń: • Metoda zachłanna – najbliższy sąsiad – mogą być bardzo złe • 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: • 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 • 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 Nadawca – Alicja Odbiorca – Bogdan Klucz prywatny: n, d Klucz publiczny: n, e Algorytm deszyfrujący M=Pdmod n Algorytm szyfrujący P=Me mod n Tekst zaszyfrowany P Tekst jawny M Tekst jawny M 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) Działania (przy szyfrowaniu): Podnoszenie dużych liczb do dużych potęg i branie reszty z dzielenia (mod) 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 . informatyka +

  18. Problemy trudne, 2 – liczby pierwsze Problemy dotyczące liczb pierwszych: • Dana jest liczba n – znajdź wszystkie liczby pierwsze mniejsze od n– sito Eratosthenesa– raczej ciekawostka, mało praktyczna • 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. 12345678909876543212345678909876543211234567899876543211234567890123456789098765432112345678909876543211234567890987654321 Jak można szybko obliczać takie potęgi? Algorytm szkolny: xn = x*x*x* … * x n – 1 mnożeń Obliczenie małej potęgi: x12345678912345678912345678912345 trwałoby: 3*108 lat informatyka +

  20. Problemy trudne, 4 – porządkowanie Problem porządkowania (sortowania) Dane: Liczba naturalna n i ciąg n liczb x1, x2, ..., 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: n2lub n log nporó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: • Poszukiwanie elementów w zbiorze uporządkowanym • Znajdowanie najmniejszego/największego elementu • Znajdowanie drugiego największego elementu w zbiorze • Jednoczesne znajdowanie minimum i maksimum • Porządkowanie elementów • 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 x1, x2, ..., 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 Dwa przypadki: • Nieuporządkowany ciąg liczb x1, x2, ..., xn • Uporządkowany ciąg liczb x1, x2, ..., xn Nasz cel: Jakie są korzyści z uporządkowania? Jak utrzymywać porządek wśród informacji? – wstaw y do ciągu 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. Ciąg danych x1, x2, ..., xn– kartki książki z danymi o numerach Wyróżniony element y – nazwisko osoby, której numeru szukamy Wynik: Jeśli osoba y ma numer telefony w książce, to podaj na której stronie, a w przeciwnym razie – sygnalizuj brak danych o y Poszukiwanie osoby o danym numerze telefonu Dane:Książka telefoniczna. Ciąg danych x1, x2, ..., xn– kartki książki z danymi o numerach Wyróżniony element y – numer telefonu osoby, której szukamy Wynik: Jeśli istnieje osoba z numerem telefonu y, to podaj jej nazwisko, a w przeciwnym razie – sygnalizuj brak takiej osoby Książka telefoniczna uporządkowana alfabetycznie nazwiskami Książka telefoniczna nieuporządkowana alfabetycznie numerami 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 begin i:=1; while (x[i]<>y) and (i<n) do i:=i+1; if x[i]=y thenPrzeszukiwanieLiniowe:=i else PrzeszukiwanieLiniowe:=-1 end Przykład: Dane: ciąg: 2, 5, 1, 4, 10, 7. y = 1 Wynik:i = 3 Pewna niedogodność – sprawdzanie, czy koniec ciągu. informatyka +

  25. Poszukiwania w zbiorze nieuporządkowanymz wartownikiem Algorytm – Poszukiwanie liniowe z wartownikiem Takie same kroki algorytmu inna implementacja, czyli komputerowa realizacja: na końcu ciągu: x1x2 x3x4 … xn begin i:=1; x[n+1]:=y; while x[i]<>y do i:=i+1; ifi<=nthenPrzeszukiwanieLinioweWartownik:=i else PrzeszukiwanieLinioweWartownik:=-1 end wstawiamy wartownika – pilnuje końca ciągu xn+1 Nie ma sprawdzania, czy koniec ciągu informatyka +

  26. Poszukiwanie w zbiorze uporządkowanymZabawa 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: 5 porównań zamiast 20 !!! 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 11 • liniowy 1200 Porównaj, jaka jest potęga uporządkowania !!! informatyka +

  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: Algorytm poszukiwania przez połowienie jest optymalny, czyli najszybciej przeszukuje zbiory uporządkowane. n liczba porównań 100 7 1 000 10 10 000 14 100 000 17 1 000 000 20 10 000 000 24 logarytm to anagram od algorytm Funkcja logarytm, bardzo ważna w algorytmice ok.log2n informatyka +

  29. Poszukiwanie interpolacyjne functionPrzeszukiwanieBinarne(x:tablicax; k,l:integer; y:integer):integer; {Przeszukiwanie binarne ciagu x[k..l] w poszukiwaniu elementu y.} varLewy,Prawy,Srodek:integer; begin Lewy:=k; Prawy:=l; whileLewy<=Prawydo begin Srodek:=(Lewy+Prawy) div 2; if x[Srodek]=y then begin PrzeszukiwanieBinarne:=Srodek; exit end; {element y nalezy do przeszukiwanego ciagu} if x[Srodek]<y thenLewy:=Srodek+1 elsePrawy:=Srodek-1 end; PrzeszukiwanieBinarne:=-1 end Srodek = lewy + (prawy – lewy)/2 Srodek = lewy + (y – x[lewy])(prawy – lewy)/(x[prawy] – x[lewy]) Przeciętny czas interpolacyjnego umieszczania wynosi ok. log 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): czy x < y ? • dwóch zawodników: rozegranie meczu informatyka +

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

  33. Specyfikacja problemu 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 x1, x2, ..., xn Wynik: Najmniejsza wśród liczb x1, x2, ..., 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), czyli przypisz min := x1. Krok 2.Dla kolejnych elementów xi, gdzie i = 2, 3, ..., n, jeśli min > xi, to przypisz min := xi. Algorytm Max – prosta modyfikacja: zamiana > na < Wyznaczanie imin– indeksu elementu o wartości min imin := 1 imin := i 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 turniejuczyli inny sposób znajdowania max (lub min) Porównania – mecze Tomek Ośmiu zawodników: 7 meczy n zawodników: n – 1 meczy a więc nie jest szybsza Tomek Bartek Jednak jest szybciej. Gdy liczmy równolegle Bartek Tomek Witek Tolek Bolek Bartek Romek Tomek Zenek Felek Witek Tolek informatyka +

  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? Tomek Czy jest nim Bartek? Bo przegrał z Tomkiem? Ale Bartek nie grał z drugą połową! Tomek Bartek ??? Tylko dwa dodatkowe mecze! ??? Bartek Tomek Witek Tolek Bolek Bartek Romek Tomek Zenek Felek Witek Tolek informatyka +

  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 max = 8 5 ↑ 5 ? 3 ↓ 3 5 ↑ 2 ? 5 ↓ 2 3 ↑ 3 ? 1 ↓ 1 2 ↑ 2 ? 2 ↓ 2 8 ↑ 4 ? 8 ↓ 4 Porównania parami 3 1 2 2 5 3 4 8 2 5 min = 1 Kandydaci na min Krok 2. Znajdź min i max • Liczba porównań: • algorytm naiwny: n – 1 (min) + n – 2 (max) = 2n – 3 • algorytm dziel i zwyciężaj: n/2(podział)+ (n/2–1)(min) + (n/2–1)(max) • ok. 3n/2 – 2 – jest to algorytm optymalny informatyka +

  39. Problem porządkowania (sortowania) Problem porządkowania (sortowania) Dane: Liczba naturalna n i ciąg n liczb x1, x2, ..., 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 – 1wykonaj 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 + … + 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 2 Ogólnie suma: (n – 1) x n 2 Liczby trójkątne 5 = n – 1 6 = n informatyka +

  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 Scalane ciągi Scalanie 1 3 5 7 10 12 1 3 5 7 10 12 1 2 6 9 11 15 17 20 1 2 6 9 11 15 17 20 Scalony ciąg 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 Rekurencyjne wywołania na podciągach Metoda dziel i zwyciężaj Algorytm porządkowania przez scalanie MergeSort(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.MergeSort(l,s,x) – sortowanie pierwszej połowy ciągu Krok 3. MergeSort(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 2 9 5 0 dziel dziel 2 1 9 5 0 2 dziel dziel 1 5 2 9 scal scal 5 9 1 2 scal scal 0 5 9 1 2 2 scal 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 • Poszukiwanie elementów w zbiorze: • nieuporządkowanym n porównań optymalny • uporządkowanym n log n optymalny • Znajdowanie najmniejszego/największego elementu • n – 1 porównań optymalny • Znajdowanie pierwszego i drugiego największego elementu w zbiorze • n + log2n – 2 optymalny • Jednoczesne znajdowanie minimum i maksimum • 3n/2 – 2 optymalny • Porządkowanie elementów • n 2– przez wybór; n log n – przez scalanie – optymalny • Schemat Hornera • n mnożeń i n dodawań optymalny informatyka +

  47. Problemy trudne, 2 – liczby pierwsze, ponownie Problemy dotyczące liczb pierwszych: • Dana jest liczba n – czy n jest liczbą pierwszą (złożoną)? • Dana jest liczba n – rozłóż n na czynniki Algorytm kolejnego dzielenia: i : = 2; whilei*i <= n do begin if n modi = 0 then return 1 {n dzieli się przez i} i := i + 1 end; return 0 {n jest liczbą pierwszą} Złożoność: n1/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 Szyfr RSA jest bezpieczny! informatyka +

  48. Problemy trudne, 3 – podnoszenie do potęgi, again Kryptografia: Chcemy obliczać: 12345678909876543212345678909876543211234567899876543211234567890123456789098765432112345678909876543211234567890987654321 Algorytm szkolny: xn = x*x*x* … * x n – 1 mnożeń Obliczenie małej potęgi: x12345678912345678912345678912345 – 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 x22 = (x11)2 = ((x10) x)2 = ((x5)2x)2 = (((x4)x)2x)2 = (((x2)2x)2x)2 = x22 • Kolejne mnożenia: x2, x4 = (x2)2, x5 = (x4)x, x10 = (x5)2, x10x = x11, (x11)2 = x22 Liczba mnożeń: 6 zamiast 21 informatyka +

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

More Related