CZY WSZYSTKO MOŻNA POLICZYĆ NA KOMPUTERZE



Podobne dokumenty
CZY WSZYSTKO MOŻNA POLICZYĆNA KOMPUTERZE

WYSZUKIWANIE I PORZĄDKOWANIE INFORMACJI

PORZĄDEK WŚRÓD INFORMACJI

ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA ELEMENTY JĘZYKA PROGRAMOWANIA

Czy wszystko można policzyć na komputerze

PROSTE RACHUNKI WYKONYWANE ZA POMOCĄ KOMPUTERA

Luty 2001 Algorytmy (4) 2000/2001

Wszechnica Popołudniowa: Algorytmika i programowanie Czy wszystko można policzyć na komputerze. Maciej M Sysło

Analiza algorytmów zadania podstawowe

TECHNIKI ALGORYTMICZNE przybliżone i dokładne

Komputery, obliczenia, algorytmy Tianhe-2 (MilkyWay-2), system Kylin Linux, Tflops, kw

Jeszcze o algorytmach

Programowanie w VB Proste algorytmy sortowania

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 9. Karol Tarnowski A-1 p.

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

Informatyka A. Algorytmy

Wybrane wymagania dla informatyki w gimnazjum i liceum z podstawy programowej

Sortowanie danych. Jolanta Bachan. Podstawy programowania

Algorytmy i struktury danych. Wykład 4

operacje porównania, a jeśli jest to konieczne ze względu na złe uporządkowanie porównywanych liczb zmieniamy ich kolejność, czyli przestawiamy je.

Programowanie proceduralne INP001210WL rok akademicki 2017/18 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Podstawowe algorytmy i ich implementacje w C. Wykład 9

Sortowanie przez scalanie

Algorytmy i struktury danych. Wykład 4 Tablice nieporządkowane i uporządkowane

TEORETYCZNE PODSTAWY INFORMATYKI

Technologie informacyjne Wykład VII-IX

znalezienia elementu w zbiorze, gdy w nim jest; dołączenia nowego elementu w odpowiednie miejsce, aby zbiór pozostał nadal uporządkowany.

Złożoność obliczeniowa algorytmu ilość zasobów komputera jakiej potrzebuje dany algorytm. Pojęcie to

Definicja. Ciąg wejściowy: Funkcja uporządkowująca: Sortowanie polega na: a 1, a 2,, a n-1, a n. f(a 1 ) f(a 2 ) f(a n )

Algorytmy i Struktury Danych.

Algorytmy i struktury danych. Co dziś? Tytułem przypomnienia metoda dziel i zwyciężaj. Wykład VIII Elementarne techniki algorytmiczne

Algorytmy w teorii liczb

Luty 2001 Algorytmy (7) 2000/2001

INFORMATYKA SORTOWANIE DANYCH.

Algorytmy sortujące i wyszukujące

Strategia "dziel i zwyciężaj"

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

Analiza algorytmów zadania podstawowe

Jeśli czas działania algorytmu zależy nie tylko od rozmiaru danych wejściowych i przyjmuje różne wartości dla różnych danych o tym samym rozmiarze,

Piotr Chrząstowski-Wachtel Uniwersytet Warszawski. Al Chwarizmi i trzy algorytmy Euklidesa

Algorytmy i Struktury Danych, 2. ćwiczenia

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 1. Karol Tarnowski A-1 p.

prowadzący dr ADRIAN HORZYK /~horzyk tel.: Konsultacje paw. D-13/325

Porządek wśród informacji kluczem do szybkiego wyszukiwania

Rozkład materiału do nauczania informatyki w liceum ogólnokształcącym Wersja I

Podstawy systemów kryptograficznych z kluczem jawnym RSA

WYMAGANIA EGZAMINACYJNE Egzamin maturalny z INFORMATYKI

Teraz bajty. Informatyka dla szkół ponadpodstawowych. Zakres rozszerzony. Część 1.

Struktury danych i złożoność obliczeniowa Wykład 2. Prof. dr hab. inż. Jan Magott

Wszechnica Popołudniowa: Algorytmika i programowanie Porządek wśród informacji kluczem do szybkiego wyszukiwania. Maciej M Sysło

Rozkład materiału do nauczania informatyki w liceum ogólnokształcącym Wersja II

Zadanie 1. Zmiana systemów. Zadanie 2. Szyfr Cezara. Zadanie 3. Czy liczba jest doskonała. Zadanie 4. Rozkład liczby na czynniki pierwsze Zadanie 5.

Zadanie 1. Potęgi (14 pkt)

Wstęp do programowania

Znajdowanie największego i najmniejszego elementu w zbiorze n liczb całkowitych

Klasa 2 INFORMATYKA. dla szkół ponadgimnazjalnych zakres rozszerzony. Założone osiągnięcia ucznia wymagania edukacyjne na. poszczególne oceny

RÓŻNORODNE ALGORYTMY OBLICZEŃ I ICH KOMPUTEROWE REALIZACJE

Matematyczne Podstawy Informatyki

Zaawansowane algorytmy i struktury danych

Kodowanie i kompresja Streszczenie Studia Licencjackie Wykład 15, Kryptografia: algorytmy asymetryczne (RSA)

Kodowanie i kompresja Streszczenie Studia Licencjackie Wykład 14, Kryptografia: algorytmy asymetryczne (RSA)

Algorytmy i struktury danych. Wykład 6 Tablice rozproszone cz. 2

KONSPEKT ZAJĘĆ KOŁA INFORMATYCZNEGO LUB MATEMATYCZNEGO W KLASIE III GIMNAZJUM LUB I LICEUM ( 2 GODZ.)

Złożoność obliczeniowa zadania, zestaw 2

KOŁO MATEMATYCZNE LUB INFORMATYCZNE - klasa III gimnazjum, I LO

Zaawansowane algorytmy i struktury danych

Sortowanie. LABORKA Piotr Ciskowski

Wymagania edukacyjne i sposoby sprawdzania edukacyjnych osiągnięć uczniów z informatyki - klasy II zakres rozszerzony

Dlaczego możemy czuć się bezpieczni w sieci czyli o szyfrowaniu informacji

Algorytmy i złożoność obliczeniowa. Wojciech Horzelski

Wstęp do programowania. Dziel i rządź. Piotr Chrząstowski-Wachtel

Wybrane zagadnienia teorii liczb

WYMAGANIA EDUKACYJNE Z INFORMATYKI dla klasy III gimnazjalnej, Szkoły Podstawowej w Rychtalu

Zbigniew Talaga Konsultacja: Janusz Mazur. Rozkład materiału propozycja

Roman Mocek Zabrze Opracowanie zbiorcze ze źródeł Scholaris i CKE

Algorytm selekcji Hoare a. Łukasz Miemus

Rekurencja. Rekurencja zwana także rekursją jest jedną z najważniejszych metod konstruowania rozwiązań i algorytmów.

Szczegółowy program kursów szkoły programowania Halpress

Wojna morska algorytmy przeszukiwania

Ataki na RSA. Andrzej Chmielowiec. Centrum Modelowania Matematycznego Sigma. Ataki na RSA p. 1

Laboratorium nr 7 Sortowanie

Algorytmika i pseudoprogramowanie

Metody numeryczne w przykładach

Wszechnica Informatyczna: Algorytmika i programowanie Algorytmy poszukiwania i porządkowania. Elementy języka programowania.

Algorytmy przeszukiwania

1. Algorytmika. WPROWADZENIE DO ALGORYTMIKI Wprowadzenie do algorytmów. Pojęcie algorytmu.

PRZEDMIOTOWY SYSTEM OCENIANIA INFORMATYKA.

Algorytmy asymetryczne

Wykład IV Algorytmy metody prezentacji i zapisu Rzut oka na język PASCAL

Algorytmy i Struktury Danych, 2. ćwiczenia

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2014/2015. Drzewa BST c.d., równoważenie drzew, kopce.

EGZAMIN - Wersja A. ALGORYTMY I STRUKTURY DANYCH Lisek89 opracowanie kartki od Pani dr E. Koszelew

Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami

EGZAMIN MATURALNY Z INFORMATYKI WYBRANE: ... (system operacyjny) ... (program użytkowy) ... (środowisko programistyczne)

INFORMATYKA KLUCZ DO ZROZUMIENIA KARIERY DOBROBYTU

EGZAMIN MATURALNY 2012 INFORMATYKA

Kolejka priorytetowa. Często rozważa się kolejki priorytetowe, w których poszukuje się elementu minimalnego zamiast maksymalnego.

Sortowanie - wybrane algorytmy

Kryptografia. z elementami kryptografii kwantowej. Ryszard Tanaś Wykład 5

PRZEDMIOTOWY SYSTEM OCENIANIA INFORMATYKA. KLASA 2F

Transkrypt:

CZY WSZYSTKO MOŻNA POLICZYĆ NA KOMPUTERZE WSTĘP DO ZŁOŻONOŚCI OBLICZENIOWEJ Maciej M. Sysło Uniwersytet Wrocławski Uniwersytet UMK w Toruniu syslo@ii.uni.wroc.pl informatyka + 2

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: Ralf Gomory (IBM): 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. 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 Nie będą potrzebne duże komputery, najwyżej 5, Thomas J. Watson, IBM, 1948 informatyka + 6

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) 10 3 MFlops (mega flops) 10 6 GFlops (giga flops) 10 9 TFlops (tera flops) 10 12 PFlops (peta flops) 10 15 EFlops (exa flops) 10 18 ZFlops (zetta flops) 10 21 YFlops (yotta flops) 10 24 Zakładamy, że dysponujemy komputerem o mocy 1 PFlops, 1 000 000 000 000 000 op/sek informatyka + 8

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

Superkomputery, 2 ostatnie lata Seymour Cray (1925-1996) Cray-1 (1976) 250 MFlops Earth Simulator (2002) 35 TFlops IBM Blue Gine/L; 2005 180 TFlops 2007 478 TFlops informatyka + 10

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

Superkomputery, 4 stan z 2010 Najszybszy procesor PC Rozproszone komputery Intel Core i7 980XE 107.6 GFlops GIMPS (najw. l. pierwsze) 44 TFlops Google 300 TFlops Folding@home (proteiny) 3.8 PFlops Przyszłość (przewidywania): 2010: 1 EFlops (10 18 ) Cray (?) 2019: 1 EFlops (10 18 ) 2030: 1 ZFlops (10 21 ) przewidywanie pogody na 2 tygodnie informatyka + 12

Superkomputery i algorytmy Algorytmy o różnej złożoności, dla danych o różnych rozmiarach wykonywane na superkomputerze o mocy 1 PFlops (10 15 ). Algorytmy w dwóch ostatnich wierszach: odpowiadają rzeczywistym problemom zwiększenie mocy komputerów niewiele pomoże cała nadzieja w szybkich algorytmach Algorytmy wielomianowe (5 pierwszych wierszy) i niewielomianowe. informatyka + 13

Problemy trudne, 1 najkrótsza trasa premiera Problem: Znajdź najkrótszą trasę dla Premiera przez wszystkie miasta wojewódzkie. Rozwiązanie: Premier zaczyna w Stolicy a inne miasta może odwiedzać w dowolnej kolejności. Tych możliwości jest: 15*14*13*12*11* *2*1 = 15! (15 silnia) W 1990 roku było: 48*47*46* *2*1 = 48! (48 silnia) informatyka + 14

Problemy trudne, 1 najkrótsza trasa premiera Wartości funkcji n! Rosną BARDZO SZYBKO Prezydent Stanów Zjednoczonych ma problem ze znalezieniem najkrótszej trasy objazdu Stanów. Na superkomputerze o mocy 1 PFlops ile trwa obliczanie n! 15! = 1307674368000/10 15 sek. = ok. 0.01 sek. 48! = 1,2413915592536072670862289047373*10 61 /10 15 = 3*10 38 lat 25! = 15511210043330985984000000/10 15 sek. = 15511210043 sek. = = 179528 dni = 491 lat informatyka + 15

Problemy trudne, 1 najkrótsza trasa premiera Trudno sprawdzić, jak dobre jest to rozwiązanie w stosunku do najlepszego, bo go nie znamy. Zły wybór Algorytmy przybliżone szukania rozwiązań: 1. Metoda zachłanna najbliższy sąsiad mogą być bardzo złe 2. Meta-heurystyki: algorytmy genetyczne krzyżowanie i mutowanie rozwiązań algorytmy mrówkowe modelowanie feromonów informatyka + 16

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/2 100 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 Nadawca Alicja Ciekawa Ewa Odbiorca Bogdan Klucz publiczny: n, e Klucz prywatny: n, d Tekst jawny M Algorytm szyfrujący P=M e mod n Tekst zaszyfrowany P Algorytm deszyfrujący M=P d mod n 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) Bezpieczeństwo szyfru RSA nawet najmocniejszy komputer nie jest w stanie znaleźć d, znając n i e, gdy nie zna rozkładu n = p*q Działania (przy szyfrowaniu): Podnoszenie dużych liczb do dużych potęg i branie reszty z dzielenia (mod) informatyka + 18

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): 2 43112609 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. 123456789098765432123456789098765432112345678998765 43211234567890 123456789098765432112345678909876543211234567890987654321 Jak można szybko obliczać takie potęgi? Algorytm szkolny: x n = x*x*x* * x n 1 mnożeń Obliczenie małej potęgi: x 12345678912345678912345678912345 trwałoby: 3*10 8 lat informatyka + 20

Problemy trudne, 4 porządkowanie Problem porządkowania (sortowania) Dane: Liczba naturalna n i ciąg n liczb x 1, x 2,..., x n 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: n 2 lub n log n porównań informatyka + 21

Proste problemy i ich efektywne algorytmy Problemy, które są bardzo często rozwiązywane przez komputery, więc potrzebne są szybkie algorytmy: 1. Poszukiwanie elementów w zbiorze uporządkowanym 2. Znajdowanie najmniejszego/największego elementu 3. Znajdowanie drugiego największego elementu w zbiorze 4. Jednoczesne znajdowanie minimum i maksimum 5. Porządkowanie elementów 6. Obliczanie wartości wielomianu Schemat Hornera informatyka + 22

Poszukiwanie elementu w zbiorze Problem poszukiwania elementu w zbiorze specyfikacja Dane: Zbiór elementów w postaci ciągu n liczb x 1, x 2,..., x n. Wyróżniony element y Wynik: Jeśli y należy do tego zbioru, to podaj jego miejsce (indeks) w ciągu, a w przeciwnym razie sygnalizuj brak takiego elementu w zbiorze wstaw y do ciągu Dwa przypadki: Nieuporządkowany ciąg liczb x 1, x 2,..., x n Uporządkowany ciąg liczb x 1, x 2,..., x n Nasz cel: Jakie są korzyści z uporządkowania? Jak utrzymywać porządek wśród informacji? informatyka + 23

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 x 1, x 2,..., x n kartki książki z danymi o numerach Wyróżniony element y nazwisko osoby, której numeru szukamy Wynik: Jeśli osoba y ma numer telefony w książce, to podaj na której stronie, a w przeciwnym razie sygnalizuj brak danych o y Poszukiwanie osoby o danym numerze telefonu Dane: Książka telefoniczna. Ciąg danych x 1, x 2,..., x n 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

Poszukiwania w zbiorze nieuporządkowanym Algorytm Poszukiwanie liniowe Krok 1. Dla i = 1, 2,..., n, jeśli x i = 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 + 25

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: wstawiamy wartownika pilnuje końca ciągu x 1 x 2 x 3 x 4 x n x n+1 begin i:=1; Nie ma sprawdzania, x[n+1]:=y; czy koniec ciągu while x[i]<>y do i:=i+1; if i<=n then PrzeszukiwanieLinioweWartownik:=i else PrzeszukiwanieLinioweWartownik:=-1 end informatyka + 26

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: informatyka + 27

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 11 liniowy 1200 Porównaj, jaka jest potęga uporządkowania!!! informatyka + 28

Dla n = 1200 liczba porównań w algorytmie połowienia wyniosła 11 Pytania: Poszukiwanie przez połowienie złożoność (2) Jak liczba porównań zależy od n? Jak dobry jest to algorytm? Liczba porównań dla różnych n: n 100 7 1 000 10 10 000 14 100 000 17 1 000 000 20 10 000 000 24 liczba porównań ok.log 2 n Algorytm poszukiwania przez połowienie jest optymalny, czyli najszybciej przeszukuje zbiory uporządkowane. Funkcja logarytm, bardzo ważna w algorytmice logarytm to anagram od algorytm informatyka + 29

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 + 30

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

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 Różnica między dwoma problemami: Czy zbiór zawiera y? Dane: Ciąg n liczb x 1, x 2,..., x n 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. Znajdź w zbiorze element o pewnych własnościach Dane: Ciąg n liczb x 1, x 2,..., x n Wynik: Najmniejsza wśród liczb x 1, x 2,..., x n Trzeba przejrzeć cały ciąg. Zakładamy, że ciąg nie jest uporządkowany. Uporządkowanie ciągu ułatwia. informatyka + 33

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 x 1, x 2,..., x n Wynik: Najmniejsza wśród liczb x 1, x 2,..., x n 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 := x 1. imin := 1 Krok 2. Dla kolejnych elementów x i, gdzie i = 2, 3,..., n, jeśli min > x i, to przypisz min := x i. imin := i Algorytm Max prosta modyfikacja: zamiana > na < Wyznaczanie imin indeksu elementu o wartości min informatyka + 34

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 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 + 36

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? Czy jest nim Bartek? Bo przegrał z Tomkiem? Tomek 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 + 38

Jednoczesne znajdowanie min i max Obserwacja: jeśli x y, to x kandydatem na min, a y kandydatem na max Algorytm dziel i zwyciężaj : Krok 1. Podział na kandydatów na min i kandydatów na max Kandydaci na max Porównania parami Kandydaci na min 3 2 5 3? 1 2? 2 5? 3 4? 8 2? 5 1 2 3 4 2 8 5 max = 8 min = 1 Krok 2. Znajdź min i max Liczba porównań: algorytm naiwny: n 1 (min) + n 2 (max) = 2n 3 algorytm dziel i zwyciężaj: n/2(podział)+ (n/2 1)(min) + (n/2 1)(max) ok. 3n/2 2 jest to algorytm optymalny informatyka + 39

Problem porządkowania (sortowania) Problem porządkowania (sortowania) Dane: Liczba naturalna n i ciąg n liczb x 1, x 2,..., x n 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 x k jest najmniejszym elementem w ciągu x i,..., x n Krok 3. Zamień miejscami elementy x i oraz x k 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: Przykład n = 6 (n 1) + (n 2) + (n 3) + + 3 + 2 + 1 =? 5 4 3 2 1 6 = n 5 = n 1 Pole prostokąta: 5 x 6 Suma = pole czarnych diamentów: 5 x 6 informatyka + 41 2 Ogólnie suma: (n 1) x n 2 Liczby trójkątne

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 Scalanie 1 3 5 7 10 12 1 2 6 9 11 15 17 20 Scalane ciągi 1 3 5 7 10 12 1 2 6 9 11 15 17 20 Scalony ciąg 1 1 2 3 5 6 7 9 10 11 12 15 17 20 informatyka + 42

Sortowanie przez scalanie scalanie Scalane ciągi Scalone ciągi, w innym miejscu informatyka + 43

Sortowanie przez scalanie opis Metoda dziel i zwyciężaj Rekurencyjne wywołania na podciągach Algorytm porządkowania przez scalanie MergeSort(l,p,x) Dane: Ciąg liczb x l, x l+1,, x p 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 (x l,, x s ) i (x s+1,, x p ) i wynik umieść w ciągu (x l,, x p ). informatyka + 44

Sortowanie przez scalanie DEMO 2 1 2 9 5 0 2 1 2 1 2 dziel 2 dziel 9 5 9 5 0 dziel 0 dziel 2 1 scal 9 dziel scal 5 1 2 scal 5 9 scal 1 2 2 0 5 9 scal 0 1 2 2 5 9 informatyka + 45

Sortowanie przez scalanie DEMO Posortowana jest już pierwsza połowa ciągu i w trakcie sortowania drugiej połowy, scalane są dwa podciągi z pierwszej części drugiej połowy, uporządkowane wcześniej rekurencyjnie tą samą metodą Posortowana pierwsza połowa ciągu Scalane ciągi Wynik scalania dodatkowym miejscu informatyka + 46

Proste problemy i ich efektywne algorytmy 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 + log 2 n 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

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 Złożoność: {n jest liczbą pierwszą} n 1/2 mnożeń (*) i dzieleń (mod) Szyfr RSA jest bezpieczny! Wniosek: jeśli liczba jest np. 10 200, to złożoność 10 100 to trwałoby lata nawet na Cray informatyka + 48

Problemy trudne, 3 podnoszenie do potęgi, again Kryptografia: Chcemy obliczać: 123456789098765432123456789098765432112345678998765432112 34567890 123456789098765432112345678909876543211234567890987654321 Algorytm szkolny: x n = x*x*x* * x n 1 mnożeń Obliczenie małej potęgi: x 12345678912345678912345678912345 3*10 8 lat Algorytm rekurencyjny, korzysta ze spostrzeżenia: jeśli m jest parzyste, to x m = (x m/2 ) 2 jeśli m jest nieparzyste, to x m = (x m 1 )x (m 1 staje się parzyste). Przykład: m = 22 x 22 = (x 11 ) 2 = ((x 10 ) x) 2 = ((x 5 ) 2 x) 2 = (((x 4 )x) 2 x) 2 = (((x 2 ) 2 x) 2 x) 2 = x 22 Kolejne mnożenia: x 2, x 4 = (x 2 ) 2, x 5 = (x 4 )x, x 10 = (x 5 ) 2, x 10 x = x 11, (x 11 ) 2 = x 22 Liczba mnożeń: 6 zamiast 21 informatyka + 49

Podnoszenie do potęgi łatwy problem Potega(x,n) { x n } if n=1 then Potega:=x else if n parzyste then Potega:=Potega (x,n/2)^2 {x n = (x n/2 ) 2 } else Potega:=Potega (x,n 1)*x {x n = (x n 1 )x} Złożoność (liczba mnożeń): liczba bitów w rozwinięciu n podnoszenie do kwadratu ok. log 2 n plus liczba jedynek w rozwinięciu n mnożenie przez x nie więcej niż log 2 n Razem: nie więcej niż 2*log 2 n Długość rozwinięcia binarnego liczb: A zatem, obliczenie x 12345678901234567890123456789012345 algorytmem rekurencyjnym to ok. 200 mnożeń informatyka + 50

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

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