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

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.

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

Informatyka A. Algorytmy

Wybrane wymagania dla informatyki w gimnazjum i liceum z podstawy programowej

Algorytmy i struktury danych. Wykład 4

Sortowanie danych. Jolanta Bachan. Podstawy programowania

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

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

Programowanie w VB Proste algorytmy sortowania

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

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 )

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

Sortowanie przez scalanie

Algorytmy i Struktury Danych.

TEORETYCZNE PODSTAWY INFORMATYKI

Technologie informacyjne Wykład VII-IX

INFORMATYKA SORTOWANIE DANYCH.

Algorytmy sortujące i wyszukujące

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,

Luty 2001 Algorytmy (7) 2000/2001

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

Strategia "dziel i zwyciężaj"

Analiza algorytmów zadania podstawowe

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

Algorytmy w teorii liczb

Algorytmy i Struktury Danych, 2. ćwiczenia

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

Zadanie 1. Potęgi (14 pkt)

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

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

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

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

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

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

Podstawy systemów kryptograficznych z kluczem jawnym RSA

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

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

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

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

WYMAGANIA EGZAMINACYJNE Egzamin maturalny z INFORMATYKI

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

Matematyczne Podstawy Informatyki

Wstęp do programowania

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

Sortowanie. LABORKA Piotr Ciskowski

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

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

Zaawansowane algorytmy i struktury danych

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.)

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

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

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.

Zaawansowane algorytmy i struktury danych

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

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

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

INFORMATYKA KLUCZ DO ZROZUMIENIA KARIERY DOBROBYTU

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

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

Algorytmy i Struktury Danych, 2. ćwiczenia

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

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

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

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

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

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

RÓŻNORODNE ALGORYTMY OBLICZEŃ I ICH KOMPUTEROWE REALIZACJE

Laboratorium nr 7 Sortowanie

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

Algorytmy asymetryczne

Wybrane zagadnienia teorii liczb

PRÓBNY EGZAMIN MATURALNY Z INFORMATYKI

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

Wojna morska algorytmy przeszukiwania

PRZEDMIOTOWY SYSTEM OCENIANIA INFORMATYKA.

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

Algorytm selekcji Hoare a. Łukasz Miemus

Metody numeryczne w przykładach

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

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

Część I. Uwaga: Akceptowane są wszystkie odpowiedzi merytorycznie poprawne i spełniające warunki zadania. Zadanie 1.1. (0 3)

Algorytmika i pseudoprogramowanie

EGZAMIN MATURALNY 2012 INFORMATYKA

Programowanie dynamiczne cz. 2

Algorytmy przeszukiwania

Rekurencja. Dla rozwiązania danego problemu, algorytm wywołuje sam siebie przy rozwiązywaniu podobnych podproblemów. Przykład: silnia: n! = n(n-1)!

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 informatyka + 6

IBM początki dużych komputerów Nie będą potrzebne duże komputery, najwyżej 5, Thomas J. Watson, IBM, 1948 informatyka + 7

Rozwój elektroniki informatyka + 8

Rozwój elektroniki informatyka + 9

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

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

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

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

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

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

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

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

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

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

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

Szyfr RSA Nadawca Alicja Klucz publiczny: n, e Ciekawa Ewa Odbiorca Bogdan Klucz prywatny: n, d Tekst jawny M Algorytm szyfrujący P=M e mod n Tekst zaszyfrowany P 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) Algorytm deszyfrujący M=P d mod n Tekst jawny M 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 + 21

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

Problemy trudne, 3 podnoszenie do potęgi Kryptografia: Szyfr RSA bazuje na podnoszeniu do dużej potęgi dużych liczb, np. 1234567890987654321234567890987654321123456789987654 3211234567890 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 + 23

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

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

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

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

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 Książka telefoniczna uporządkowana alfabetycznie nazwiskami 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 Książka telefoniczna nieuporządkowana alfabetycznie numerami informatyka + 28

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

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

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

Poszukiwanie w zbiorze uporządkowanym Zabawa w zgadywanie liczby Zgadywana liczba: 17 w przedziale [1 : 20] Metoda: połowienia przedziału Kolejne kroki: strzałka wskazuje wybór; kolor czerwony ciąg do przeszukania: 5 porównań zamiast 20!!! informatyka + 32

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

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

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

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

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

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

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

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

Wyłanianie najlepszego zawodnika w turnieju czyli inny sposób znajdowania max (lub min) Porównania mecze Tome k 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 + 41

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

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

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 3? 1 1 2 2? 2 2 5 5? 3 3 8 4? 8 4 5 2? 5 2 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 + 44

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

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 + 46 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 + 47

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

Sortowanie przez scalanie opis Metoda dziel i zwyciężaj 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 + 49

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

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 scal 0 5 9 0 1 2 2 5 9 informatyka + 51

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

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

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ść: 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 + 54

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

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

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

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

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