Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
OpublikowałΖηναις Δεσποτόπουλος Został zmieniony 6 lat temu
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 informatyka +
3
Algorytm, algorytmika algorytm od Muhammad informatyka +
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 +
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 +
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 +
6
IBM – początki dużych komputerów
Nie będą potrzebne duże komputery, najwyżej 5, Thomas J. Watson, IBM, 1948 informatyka +
7
Rozwój elektroniki informatyka +
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, op/sek informatyka +
9
Superkomputery, 1 – początki
Superkomputer – najszybszy komputer w danej chwili Colossus, 1943 – 5 kOPS Z3, 1941 – 20 OPS (oper/sek.) informatyka +
10
Superkomputery, 2 – ostatnie lata
Cray-1 (1976) – 250 MFlops Seymour Cray ( ) IBM Blue Gine/L; 2005 – 180 TFlops 2007 – 478 TFlops Earth Simulator (2002) – 35 TFlops informatyka +
11
Superkomputery, 3 – stan z 2010
1st. Jaguar Cray XT – PFlops procesory Opteron AMD macierz procesorów 136th. Galera, TASK, Gdańsk 50 TFlops Byłby 1st. w 2003 roku 2nd. Roadrunner IBM PFlops informatyka +
12
Superkomputery, 4 – stan z 2010
Najszybszy procesor PC – Intel Core i7 980XE – GFlops Rozproszone komputery – GIMPS (najw. l. pierwsze) – 44 TFlops Google – 300 TFlops (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 +
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 +
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 +
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! = /1015 sek. = ok sek. 48! = 1, *1061/1015 = 3*1038 lat 25! = /1015 sek. = sek. = = dni = 491 lat informatyka +
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ń: 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 +
17
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 +
18
Algorytm deszyfrujący
Szyfr RSA Ciekawa – Ewa Nadawca – Alicja Odbiorca – Bogdan Klucz publiczny: n, e Klucz prywatny: n, d Algorytm szyfrujący P=Me mod n Algorytm deszyfrujący M=Pd mod n Tekst jawny M Tekst zaszyfrowany P 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 +
19
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): – 1 Zawiera: cyfr. Zajmuje 3461 stron. Serwis internetowy: Great Internet Mersenne Prime Search (GIMPS) – moc 44 TFlops informatyka +
20
Problemy trudne, 3 – podnoszenie do potęgi
Kryptografia: Szyfr RSA bazuje na podnoszeniu do dużej potęgi dużych liczb, np Jak można szybko obliczać takie potęgi? Algorytm szkolny: xn = x*x*x* … * x n – 1 mnożeń Obliczenie małej potęgi: x trwałoby: 3*108 lat informatyka +
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 +
22
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 +
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 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 +
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. 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 +
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 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 Przykład: Dane: ciąg: 2, 5, 1, 4, 10, 7. y = 1 Wynik: i = 3 Pewna niedogodność – sprawdzanie, czy koniec ciągu. informatyka +
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 begin i:=1; x[n+1]:=y; while x[i]<>y do i:=i+1; if i<=n then PrzeszukiwanieLinioweWartownik:=i else PrzeszukiwanieLinioweWartownik:=-1 end wstawiamy wartownika – pilnuje końca ciągu xn+1 Nie ma sprawdzania, czy koniec ciągu informatyka +
27
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: 5 porównań zamiast 20 !!! informatyka +
28
Porównaj, jaka jest potęga uporządkowania !!!
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 Porównaj, jaka jest potęga uporządkowania !!! informatyka +
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: Algorytm poszukiwania przez połowienie jest optymalny, czyli najszybciej przeszukuje zbiory uporządkowane. n liczba porównań logarytm to anagram od algorytm Funkcja logarytm, bardzo ważna w algorytmice ok.log2 n informatyka +
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; begin Lewy:=k; Prawy:=l; while Lewy<=Prawy do 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 then Lewy:=Srodek+1 else Prawy:=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 +
31
Na wyposażeniu każdego inżyniera do 1972 roku
Suwaki logarytmiczne Na wyposażeniu każdego inżyniera do 1972 roku Skala 30 cm Skala 150 cm Skala 12 m informatyka +
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): czy x < y ? dwóch zawodników: rozegranie meczu informatyka +
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 ? 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 +
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), 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 +
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 +
36
Ośmiu zawodników: 7 meczy
Wyłanianie najlepszego zawodnika w turnieju czyli 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 Bartek Tomek Jednak jest szybciej. Gdy liczmy równolegle Bartek Witek Tomek Tolek Bartek Romek Bolek Witek Tomek Zenek Tolek Felek informatyka +
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 +
38
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ą! Bartek Tomek ??? Tylko dwa dodatkowe mecze! Bartek Witek ??? Tomek Tolek Bartek Romek Bolek Witek Tomek Zenek Tolek Felek informatyka +
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 3 ↑ 3 ? 1 ↓ 1 2 ↑ 2 ? 2 ↓ 5 ↑ 5 ? 3 ↓ 3 8 ↑ 4 ? 8 ↓ 4 5 ↑ 2 ? 5 ↓ 2 max = 8 Porównania parami 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 +
40
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 +
41
Złożoność porządkowania przez wybór
Liczba zamian elementów w kolejnych krokach: … + 1 = n – 1 Liczba porównań w kolejnych krokach: (n – 1) + (n – 2) + (n – 3) + … = ? 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 Liczby trójkątne 5 4 3 2 1 5 = n – 1 6 = n informatyka +
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 Scalony ciąg informatyka +
43
Sortowanie przez scalanie – scalanie
Scalane ciągi Scalone ciągi, w innym miejscu informatyka +
44
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 +
45
Sortowanie przez scalanie DEMO
dziel 9 5 0 dziel dziel 2 1 9 5 2 dziel dziel 2 1 9 5 scal scal 5 9 1 2 scal scal scal informatyka +
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 +
47
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 – 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 +
48
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; while i*i <= n do begin if n mod i = 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 , to złożoność – to trwałoby lata nawet na Cray Szyfr RSA jest bezpieczny! informatyka +
49
Problemy trudne, 3 – podnoszenie do potęgi, again
Kryptografia: Chcemy obliczać: Algorytm szkolny: xn = x*x*x* … * x n – 1 mnożeń Obliczenie małej potęgi: x – 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 +
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)^ {xn = (xn/2)2} else Potega:=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 x algorytmem rekurencyjnym to ok.… 200 mnożeń informatyka +
51
Najlepszym sposobem przyspieszania komputerów
Konkluzja Najlepszym sposobem przyspieszania komputerów jest obarczanie ich mniejszą liczbą działań (szybszymi algorytmami) [Ralf Gomory, IBM]
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 +
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 +
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.