• Nie Znaleziono Wyników

Czy wszystko mozna policzyc na komputerze.NET

N/A
N/A
Protected

Academic year: 2021

Share "Czy wszystko mozna policzyc na komputerze.NET"

Copied!
54
0
0

Pełen tekst

(1)

(2) 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.

(3) 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.

(4) 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.

(5) 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.

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

(7) Rozwój elektroniki. informatyka +. 7.

(8) 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 000 000 op/sek. informatyka +. 8.

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

(10) 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.

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

(12) 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.

(13) 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.

(14) 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.

(15) 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.

(16) 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.

(17) 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.

(18) 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.

(19) 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.

(20) Problemy trudne, 3 – podnoszenie do potęgi Kryptografia: Szyfr RSA bazuje na podnoszeniu do dużej potęgi dużych liczb, np. 123456789098765432123456789098765432112345678998765 43211234567890123456789098765432112345678909876543211234567890987654321 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ń. x12345678912345678912345678912345 3*108 lat. informatyka +. 20.

(21) 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: n2 lub n log n porównań. informatyka +. 21.

(22) 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.

(23) 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 – wstaw y do ciągu. 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?. informatyka +. 23.

(24) 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. informatyka +. 24.

(25) 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 PrzeszukiwanieLiniowe:=i else PrzeszukiwanieLiniowe:=-1 end. informatyka +. 25.

(26) 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: x1 x2 x3 x4 … 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 PrzeszukiwanieLinioweWartownik:=i else PrzeszukiwanieLinioweWartownik:=-1 end. informatyka +. 26.

(27) Poszukiwanie w zbiorze uporządkowanym Zabawa w zgadywanie liczby Zgadywana liczba: Metoda: Kolejne kroki:. 17 w przedziale [1 : 20]. połowienia przedziału strzałka wskazuje wybór; kolor czerwony – ciąg do przeszukania:. informatyka +. 27.

(28) 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.

(29) 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 100 1 000 10 000 100 000 1 000 000 10 000 000. liczba porównań 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. logarytm to anagram od algorytm. ok.log2 n. informatyka +. 29.

(30) Poszukiwanie interpolacyjne function PrzeszukiwanieBinarne(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 PrzeszukiwanieBinarne:=Srodek; exit end; {element y nalezy do przeszukiwanego ciagu} if x[Srodek]<y then Lewy:=Srodek+1 else Prawy:=Srodek-1 end; PrzeszukiwanieBinarne:=-1 Przeciętny czas interpolacyjnego end umieszczania wynosi ok. log log n. informatyka +. 30.

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

(32) 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.

(33) 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 ?. 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. 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.

(34) 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), imin := 1 czyli przypisz min := x1. 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.

(35) 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.

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

(37) 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.

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

(39) 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. 5. 8. ↑. ↑. ↑. 3 ? 1. 2 ? 2. 5 ? 3. ↓. ↓. 1. 2. 3. ↓. Kandydaci na min. 5. 2. 3. ↑. ↑. 4 ? 8. 2 ? 5. ↓. ↓. 4. 2. max = 8. min = 1. 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.

(40) 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 – 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.

(41) 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. ♦. ♦. ♦. ♦. ♦. ∇. 5x6. 4. ♦. ♦. ♦. ♦. ∇. ∇. 2. 3. ♦. ♦. ♦. ∇. ∇. ∇. 2. ♦. ♦. ∇. ∇. ∇. ∇. 1. ♦. ∇. ∇. ∇. ∇. 5=n–1. ∇. 6=n. informatyka +. Ogólnie suma: (n – 1) x n 2. Liczby trójkątne. 41.

(42) 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 1 Scalony ciąg. 35 2. 7 6. 10 9. 1 3 5 7 10 12. 12 11. 15 17 20. 1 2 6 9 11 15 17 20. 1 1 2 3 5 6 7 9 10 11 12 15 17 20. informatyka +. 42.

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

(44) Sortowanie przez scalanie – opis Metoda dziel i zwyciężaj. Rekurencyjne wywołania na podciągach. 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.

(45) Sortowanie przez scalanie. DEMO. 212950 dziel. 2 1 2. 950. dziel dziel. 2 1. 9 5. 2 dziel. dziel 1. 2. 0. 5. 9. scal. scal. 1 2. 5 9 scal 1 2 2. scal 0 5 9 scal 0 1 2 2 5 9. informatyka +. 45.

(46) 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.

(47) Proste problemy i ich efektywne algorytmy 1. Poszukiwanie elementów w zbiorze: – –. nieuporządkowanym uporządkowanym. n porównań n log n. optymalny optymalny. 2. Znajdowanie najmniejszego/największego elementu –. n – 1 porównań. optymalny. 3. Znajdowanie pierwszego i drugiego największego elementu w zbiorze –. n + log2n – 2. optymalny. 4. Jednoczesne znajdowanie minimum i maksimum –. 3n/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.

(48) 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ść:. 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. informatyka +. 48.

(49) Problemy trudne, 3 – podnoszenie do potęgi, again Kryptografia: Chcemy obliczać: 123456789098765432123456789098765432112345678998765432112 34567890123456789098765432112345678909876543211234567890987654321 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)2 x)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.

(50) 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. 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 +. 50.

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

(52) 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.

(53) 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.

(54)

(55)

Cytaty

Powiązane dokumenty

Jakie warto´sci mo˙ze przybiera´c wyznacznik macierzy A?.

[r]

Na ile różnych sposobów można rozdać 6 jednakowych baloników, 4 jednakowych samo- chodzików i 3 różne książki trójce dzieci tak, by każde z dzieci otrzymało przynajmniej

Na ile różnych sposobów można rozdać 6 jednakowych baloników, 7 jednakowych samo- chodzików i 4 różne książki trójce dzieci tak, by każde z dzieci otrzymało przynajmniej

(Kolejność występujących elementów nie jest tutaj istotna, ale istotne jest ile razy dany element się powtarza.) Proszę wypisać w ten sposób wszystkie kombinacje 5-elementowe

W połowie trasy zorientował się, że nie zdąży i zwiększył prędkość o 20km/h, dzięki czemu nie spóźnił się do pracy.. Chcemy znaleźć taką krawędź

W wyniku skªadania dwóch funkcji monotonicznie rosn¡cych lub malej¡cych otrzymamy funkcj¦ monotonicznie rosn¡c¡. Natomiast skªadaj¡c funkcj¦ monotonicznie rosn¡c¡ z funkcj¡

Umieszczenie przysłówka „bezwzględnie” w nawiasie oznacza, że wszystkie lub prawie wszystkie wyrazy szeregu mają ten sam znak i zbieżność bezwzględna jest