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

Post on 08-Jan-2016

38 views 3 download

description

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 - PowerPoint PPT Presentation

Transcript of 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ł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