Post on 08-Jan-2016
description
CZY WSZYSTKO MOŻNA POLICZYĆ NA KOMPUTERZE
WSTĘP DO ZŁOŻONOŚCI OBLICZENIOWEJ
Maciej M. SysłoUniwersytet Wrocławski
Uniwersytet UMK w Toruniusyslo@ii.uni.wroc.pl
2informatyka +
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
informatyka + 6
Nie będą potrzebne duże komputery, najwyżej 5,
Thomas J. Watson, IBM, 1948
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
informatyka + 8
Zakładamy, że dysponujemy komputerem o mocy 1 PFlops, 1 000 000 000 000 000 op/sek
Superkomputery, 1 – początki
informatyka + 9
Z3, 1941 – 20 OPS (oper/sek.)
Colossus, 1943 – 5 kOPS
Superkomputer – najszybszy komputer w danej chwili
Superkomputery, 2 – ostatnie lata
informatyka + 10
Seymour Cray (1925-1996)
Earth Simulator (2002) – 35 TFlops
Cray-1 (1976) – 250 MFlops
IBM Blue Gine/L; 2005 – 180 TFlops2007 – 478 TFlops
Superkomputery, 3 – stan z 2010
informatyka + 11
1st. Jaguar Cray XT – 1.759 PFlops224162 procesory Opteron AMD macierz procesorów
2nd. Roadrunner IBM 1.105 PFlops
136th. Galera, TASK, Gdańsk 50 TFlops
Byłby 1st. w 2003 roku
Superkomputery, 4 – stan z 2010
informatyka + 12
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
Superkomputery i algorytmy
informatyka + 13
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.
Problemy trudne, 1 – najkrótsza trasa premiera
Problem: Znajdź najkrótszą trasę dla Premiera przez wszystkie miasta wojewódzkie.
informatyka + 14
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)
Problemy trudne, 1 – najkrótsza trasa premiera
informatyka + 15
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
Wartości funkcji n! Rosną BARDZO SZYBKO
Prezydent Stanów Zjednoczonych ma problem ze znalezieniem najkrótszej trasy objazdu Stanów.
Problemy trudne, 1 – najkrótsza trasa premiera
informatyka + 16
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
Trudno sprawdzić, jak dobre jest to rozwiązanie w stosunku do najlepszego, bo go nie znamy.
Zły wybór
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
informatyka + 18
Ciekawa – Ewa
Nadawca – Alicja Odbiorca – Bogdan
Algorytm szyfrujący
P=Me mod n
Tekst zaszyfrowany P
Tekst jawny M
Algorytm deszyfrującyM=Pd mod n
Tekst jawny M
Klucz publiczny: n, e Klucz prywatny: n, d
.
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
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.
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
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
Problemy trudne, 4 – porządkowanie
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
Proste problemy i ich efektywne algorytmy
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?
informatyka + 23
– wstaw y do ciągu
Poszukiwanie elementu w zbiorze – przykład
Przeszukiwanie książki telefonicznej
Poszukiwanie numeru telefonu danej osobyDane: 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 telefonuDane: 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
Książka telefoniczna uporządkowana alfabetycznie nazwiskami
Książka telefoniczna nieuporządkowana alfabetycznie
numerami
Poszukiwania w zbiorze nieuporządkowanym
Algorytm – Poszukiwanie linioweKrok 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
endinformatyka + 25
Pewna niedogodność – sprawdzanie, czy koniec ciągu.
Przykład: Dane: ciąg: 2, 5, 1, 4, 10, 7. y = 1Wynik: i = 3
Poszukiwania w zbiorze nieuporządkowanymz wartownikiem
Algorytm – Poszukiwanie liniowe z wartownikiemTakie 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
informatyka + 26
wstawiamy wartownika – pilnuje końca ciąguxn+1
Nie ma sprawdzania, czy koniec ciągu
Poszukiwanie w zbiorze uporządkowanymZabawa w zgadywanie liczby
informatyka + 27
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 !!!
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
informatyka + 28
Poszukiwanie przez połowienieZłożoność (1)
Porównaj, jaka jest potęga uporządkowania !!!
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:
informatyka + 29
Poszukiwanie przez połowieniezłożoność (2)
n liczba porównań
100 7 1 000 10 10 000 14 100 000 17 1 000 000 2010 000 000 24
ok.log2 n
Funkcja logarytm, bardzo ważna w algorytmice
logarytm to anagram od
algorytm
Algorytm poszukiwania przez połowienie jest optymalny, czyli najszybciej przeszukuje zbiory uporządkowane.
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:=-1end
Srodek = lewy + (y – x[lewy])(prawy – lewy)/(x[prawy] – x[lewy])
Srodek = lewy + (prawy – lewy)/2
Przeciętny czas interpolacyjnego umieszczania wynosi ok. log log n
Suwaki logarytmiczne
informatyka + 31
Na wyposażeniu każdego inżyniera
do 1972 roku
Skala 30 cm
Skala 150 cm
Skala 12 m
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
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.
informatyka + 33
Różnica między dwoma problemami:
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.
Specyfikacja problemu
Specyfikacja problemu – dokładne opisanie problemu
Problem Min – Znajdowanie najmniejszego elementu w zbiorzeDane: 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 zbiorzeKrok 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
informatyka + 34
imin := 1
imin := i
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)
informatyka + 36
Bartek Romek Bolek Witek Tomek
Zenek Tolek Felek
Bartek Witek Tomek
Tolek
Bartek Tomek
Tomek
Porównania – mecze Ośmiu zawodników: 7 meczyn zawodników: n – 1 meczy
a więc nie jest szybsza
Jednak jest szybciej. Gdy liczmy równolegle
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?
informatyka + 38
Bartek Romek Bolek Witek Tomek
Zenek Tolek Felek
Bartek Witek Tomek
Tolek
Bartek Tomek
TomekCzy jest nim Bartek?
Bo przegrał z Tomkiem?
Ale Bartek nie grał z drugą połową!
???
???Tylko dwa dodatkowe mecze!
3 1 2 2 5 3 4 8 2 5
Jednoczesne znajdowanie min i max
informatyka + 39
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
Kandydaci na min
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
Porównania parami
3↑3 ? 1 ↓ 1
2↑2 ? 2 ↓ 2
5↑5 ? 3 ↓ 3
8 ↑4 ? 8↓4
5 ↑2 ? 5↓2
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 SortIdea: 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 + … + 1 = n – 1
Liczba porównań w kolejnych krokach:
(n – 1) + (n – 2) + (n – 3) + … + 3 + 2 + 1 = ?
informatyka + 41
5
4
3
2
1
Przykładn = 6
6 = n
5 = n – 1
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
Sortowanie przez scalanie – scalanie
informatyka + 42
Scalanie – z dwóch uporządkowanych ciągów utwórz jeden uporządkowany
Algorytm scalania. Scal. Dane: dwa ciągi uporządkowaneWynik: scalony ciąg uporządkowany Krok: do tworzonego ciągu pobieraj najmniejszy element
z czoła scalanych ciągów
1 3 5 7 10 12
1 2 6 9 11 15 17 20
1 3 5 7 10 121 2 6 9 11 15 17 20
Scalane ciągiScalanie
1 1 2 3 5 6 7 9 10 11 12 15 17 20 Scalony ciąg
Sortowanie przez scalanie – scalanie
informatyka + 43
Scalane ciągi
Scalone ciągi, w innym miejscu
informatyka + 44
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ąguKrok 3. MergeSort(s+1,p,x) – sortowanie drugiej połowy ciąguKrok 4. Zastosuj algorytm Scal do ciągów (xl, …, xs) i (xs+1, …, xp) i wynik umieść w ciągu (xl, …, xp).
Rekurencyjne wywołania na podciągach
Sortowanie przez scalanie – opis
Metoda dziel i zwyciężaj
informatyka + 45
2 1 2 9 5 0
2 1 29 5 0
dziel
dziel
2 1dziel
9
0
1 2
9 5
1 2 2 0 5 9
0 1 2 2 5 9
Sortowanie przez scalanie DEMO
dziel
2 1
2
scal
scal
scal
scal
scal5
dziel
5 9
Sortowanie przez scalanie DEMO
informatyka + 46
Scalane ciągi
Wynik scalania dodatkowym miejscu
Posortowana pierwsza połowa ciągu
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ą
1. Poszukiwanie elementów w zbiorze: – nieuporządkowanym n porównań optymalny
– uporządkowanym 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 + 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ń optymalny
informatyka + 47
Proste problemy i ich efektywne algorytmy
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;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
informatyka + 48
Szyfr RSA jest bezpieczny!
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)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
Podnoszenie do potęgi – łatwy problem
informatyka + 50
Potega(x,n) { xn }
if n=1 then Potega:=x
else if n – parzyste then
Potega:=Potega (x,n/2)^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ż log2nRazem: nie więcej niż 2*log2n
Długość rozwinięcia binarnego liczb:A zatem, obliczenie
x12345678901234567890123456789012345
algorytmem rekurencyjnym to ok.… 200 mnożeń
Najlepszym sposobem przyspieszania komputerów
jest obarczanie ich mniejszą liczbą działań (szybszymi algorytmami)
[Ralf Gomory, IBM]
51
Konkluzja
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