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

54

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 [email protected]. 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

Page 1: CZY WSZYSTKO MOŻNA POLICZYĆ NA KOMPUTERZE WSTĘP DO ZŁOŻONOŚCI OBLICZENIOWEJ
Page 2: 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 [email protected]

2informatyka +

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

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

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

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

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

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

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

IBM – początki dużych komputerów

informatyka + 6

Nie będą potrzebne duże komputery, najwyżej 5,

Thomas J. Watson, IBM, 1948

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

Rozwój elektroniki

informatyka + 7

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

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

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

Superkomputery, 1 – początki

informatyka + 9

Z3, 1941 – 20 OPS (oper/sek.)

Colossus, 1943 – 5 kOPS

Superkomputer – najszybszy komputer w danej chwili

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

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

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

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

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

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

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

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.

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

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)

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

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.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 !!!

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

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 !!!

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

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.

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

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

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

Suwaki logarytmiczne

informatyka + 31

Na wyposażeniu każdego inżyniera

do 1972 roku

Skala 30 cm

Skala 150 cm

Skala 12 m

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

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

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

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.

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

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

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

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

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

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

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

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

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

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!

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

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

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

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

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

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

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

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

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

Sortowanie przez scalanie – scalanie

informatyka + 43

Scalane ciągi

Scalone ciągi, w innym miejscu

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

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

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

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

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

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ą

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

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

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

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!

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

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

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

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ń

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

Najlepszym sposobem przyspieszania komputerów

jest obarczanie ich mniejszą liczbą działań (szybszymi algorytmami)

[Ralf Gomory, IBM]

51

Konkluzja

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

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

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

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

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