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

Slides:



Advertisements
Podobne prezentacje
WYSZUKIWANIE I PORZĄDKOWANIE INFORMACJI WPROWADZENIE DO ALGORYTMIKI
Advertisements

PORZĄDEK WŚRÓD INFORMACJI KLUCZEM DO SZYBKIEGO WYSZUKIWANIA
ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA ELEMENTY JĘZYKA PROGRAMOWANIA
ZNAJDOWANIE NAJKRÓTSZYCH DRÓG oraz NAJNIŻSZYCH i NAJKRÓTSZYCH DRZEW WSTĘP DO OBLICZEŃ NA GRAFACH
Temat 2: Podstawy programowania Algorytmy – 1 z 2 _________________________________________________________________________________________________________________.
Plan Czym się zajmiemy: 1.Bilans przepływów międzygałęziowych 2.Model Leontiefa.
Tworzenie odwołania zewnętrznego (łącza) do zakresu komórek w innym skoroszycie Możliwości efektywnego stosowania odwołań zewnętrznych Odwołania zewnętrzne.
Excel 2007 dla średniozaawansowanych zajęcia z dnia
Niepewności pomiarowe. Pomiary fizyczne. Pomiar fizyczny polega na porównywaniu wielkości mierzonej z przyjętym wzorcem, czyli jednostką. Rodzaje pomiarów.
Wyrażenia Algebraiczne Bibliografia Znak 1Znak 2 Znak 3 Znak 4 Znak 5 Znak 6 Znak 7 Znak 8 Znak 9 Znak 10 Znak 11.
Poczta elektroniczna – e- mail Gmail zakładanie konta. Wysyłanie wiadomości.
EWALUACJA PROJEKTU WSPÓŁFINANSOWANEGO ZE ŚRODKÓW UNII EUROPEJSKIE J „Wyrównywanie dysproporcji w dostępie do przedszkoli dzieci z terenów wiejskich, w.
Zmienne losowe Zmienne losowe oznacza się dużymi literami alfabetu łacińskiego, na przykład X, Y, Z. Natomiast wartości jakie one przyjmują odpowiednio.
„MATEMATYKA JEST OK!”. Figury Autorzy Piotr Lubelski Jakub Królikowski Zespół kierowany pod nadzorem mgr Joanny Karaś-Piłat.
W KRAINIE TRAPEZÓW. W "Szkole Myślenia" stawiamy na umiejętność rozumowania, zadawania pytań badawczych, rozwiązywania problemów oraz wykorzystania wiedzy.
Lekcja 17 Budowanie wyrażeń algebraicznych Opracowała Joanna Szymańska Konsultacje Bożena Hołownia.
KOMBINATORYKA.
Metody Analizy Danych Doświadczalnych Wykład 9 ”Estymacja parametryczna”
Matematyka przed egzaminem czyli samouczek dla gimnazjalisty Przygotowała Beata Czerniak FUNKCJE.
Menu Jednomiany Wyrażenia algebraiczne -definicja Mnożenie i dzielenie sum algebraicznych przez jednomian Mnożenie sum algebraicznych Wzory skróconego.
Optymalna wielkość produkcji przedsiębiorstwa działającego w doskonałej konkurencji (analiza krótkookresowa) Przypomnijmy założenia modelu doskonałej.
Katarzyna Rychlicka Wielomiany. Katarzyna Rychlicka Wielomiany Przykłady Wykresy funkcji wielomianowych Równania wielomianowe Działania na wielomianach.
Renata Maciaszczyk Kamila Kutarba. Teoria gier a ekonomia: problem duopolu  Dupol- stan w którym dwaj producenci kontrolują łącznie cały rynek jakiegoś.
Obliczanie procentu danej wielkości Radosław Hołówko.
ZASTOSOWANIE  Programowanie  Ułatwianie pracy  Szybkie obliczanie  Spisywanie kosztów  Tworzenie tabel i wykresów  Obliczanie średniej, sumy,
Jak tworzymy katalog alfabetyczny? Oprac.Regina Lewańska.
O PARADOKSIE BRAESSA Zbigniew Świtalski Paweł Skałecki Wydział Matematyki, Informatyki i Ekonometrii Uniwersytet Zielonogórski Zakopane 2016.
Ucz i ucz się z TIK!.
Schematy blokowe.
Wyznaczanie miejsc zerowych funkcji
DEFINICJA I ZASTOSOWANIE W JĘZYKU HASKELL
On-the-Fly Garbage Collection
Liczby pierwsze.
FIGURY.
Przybliżenia dziesiętne liczb rzeczywistych
ALGORYTMY I STRUKTURY DANYCH
Podstawy automatyki I Wykład /2016
Wstęp do Informatyki - Wykład 3
Opracowała: Monika Grudzińska - Czerniecka
Zajęcia przygotowujące do matury rozszerzonej z matematyki
Elementy fizyki kwantowej i budowy materii
Prezentację wykonali: Uczniowie klasy VI Rok szkolny 2009/2010
ALGORYTMY I STRUKTURY DANYCH
TECHNIKI ALGORYTMICZNE – przybliżone i dokładne WPROWADZENIE DO ALGORYTMIKI
PROSTE RACHUNKI WYKONYWANE ZA POMOCĄ KOMPUTERA WPROWADZENIE DO ALGORYTMIKI
ALGORYTMY I STRUKTURY DANYCH
PRZYGOTOWANIE DO EGZAMINU MATURALNEGO Z INFORMATYKI
ZNAJDOWANIE NAJKRÓTSZYCH DRÓG oraz NAJNIŻSZYCH i NAJKRÓTSZYCH DRZEW WSTĘP DO OBLICZEŃ NA GRAFACH
Problem Plecakowy (Problem złodzieja okradającego sklep)
ALGORYTMY I STRUKTURY DANYCH
Pisemne dzielenie liczb naturalnych
ALGORYTMY I STRUKTURY DANYCH
MATEMATYKAAKYTAMETAM
To naprawdę bardzo proste!
Proste obliczenia w arkuszu kalkulacyjnym
ETO w Inżynierii Chemicznej
Implementacja rekurencji w języku Haskell
Znajdowanie liczb pierwszych w zbiorze
Doskonalenie rachunku pamięciowego u uczniów
Wyrównanie sieci swobodnych
Elementy Kombinatoryki
Program na dziś Wprowadzenie Logika prezentacji i artykułu
WYBRANE ZAGADNIENIA PROBABILISTYKI
To naprawdę bardzo proste!
ALGORYTMY I STRUKTURY DANYCH
Zapis prezentacji:

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 +

Algorytm, algorytmika algorytm od Muhammad informatyka + 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 +

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 +

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 +

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

Rozwój elektroniki informatyka +

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 Zakładamy, że dysponujemy komputerem o mocy 1 PFlops, 1 000 000 000 000 000 op/sek informatyka +

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

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

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

Superkomputery, 4 – stan z 2010 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 informatyka +

Superkomputery i algorytmy 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. informatyka +

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 +

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/1015 sek. = ok. 0.01 sek. 48! = 1,2413915592536072670862289047373*1061/1015 = 3*1038 lat 25! = 15511210043330985984000000/1015 sek. = 15511210043 sek. = = 179528 dni = 491 lat informatyka +

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ń: Metoda zachłanna – najbliższy sąsiad – mogą być bardzo złe Meta-heurystyki: algorytmy genetyczne – krzyżowanie i mutowanie rozwiązań algorytmy mrówkowe – modelowanie feromonów informatyka +

Problemy trudne, 2 – liczby pierwsze Problemy dotyczące liczb pierwszych: 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 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 +

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

Problemy trudne, 2 – liczby pierwsze Problemy dotyczące liczb pierwszych: Dana jest liczba n – znajdź wszystkie liczby pierwsze mniejsze od n – sito Eratosthenesa – raczej ciekawostka, mało praktyczna 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 +

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

Problemy trudne, 4 – porządkowanie 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 +

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

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? – wstaw y do ciągu informatyka +

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

Poszukiwania w zbiorze nieuporządkowanym Algorytm – Poszukiwanie liniowe Krok 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 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 +

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: 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 wstawiamy wartownika – pilnuje końca ciągu xn+1 Nie ma sprawdzania, czy koniec ciągu informatyka +

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 +

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

Poszukiwanie przez połowienie złożoność (2) 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: Algorytm poszukiwania przez połowienie jest optymalny, czyli najszybciej przeszukuje zbiory uporządkowane. n liczba porównań 100 7 1 000 10 10 000 14 100 000 17 1 000 000 20 10 000 000 24 logarytm to anagram od algorytm Funkcja logarytm, bardzo ważna w algorytmice ok.log2 n informatyka +

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 +

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

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 +

Znajdowanie elementu w zbiorze Różnica między dwoma problemami: 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. 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. informatyka +

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 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 zbiorze Krok 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 imin := 1 imin := i informatyka +

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 +

Ośmiu zawodników: 7 meczy 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 +

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 +

A jak znaleźć drugiego najlepszego zawodnika w turnieju? Tomek Czy jest nim Bartek? Bo przegrał z Tomkiem? 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 +

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 3 ↑ 3 ? 1 ↓ 1 2 ↑ 2 ? 2 ↓ 5 ↑ 5 ? 3 ↓ 3 8 ↑ 4 ? 8 ↓ 4 5 ↑ 2 ? 5 ↓ 2 max = 8 Porównania parami 3 1 2 2 5 3 4 8 2 5 min = 1 Kandydaci na min 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 +

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 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 xk jest najmniejszym elementem w ciągu xi, ..., xn Krok 3. Zamień miejscami elementy xi oraz xk informatyka +

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 = ? Przykład n = 6 Pole prostokąta: 5 x 6 Suma = pole czarnych diamentów: 5 x 6 2 Ogólnie suma: (n – 1) x n Liczby trójkątne 5   4 3 2 1 5 = n – 1 6 = n informatyka +

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

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

Sortowanie przez scalanie – opis Rekurencyjne wywołania na podciągach Metoda dziel i zwyciężaj 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ągu Krok 3. MergeSort(s+1,p,x) – sortowanie drugiej połowy ciągu Krok 4. Zastosuj algorytm Scal do ciągów (xl, …, xs) i (xs+1, …, xp) i wynik umieść w ciągu (xl, …, xp). informatyka +

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

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 +

Proste problemy i ich efektywne algorytmy Poszukiwanie elementów w zbiorze: nieuporządkowanym n porównań optymalny uporządkowanym n log n optymalny Znajdowanie najmniejszego/największego elementu n – 1 porównań optymalny Znajdowanie pierwszego i drugiego największego elementu w zbiorze n + log2n – 2 optymalny Jednoczesne znajdowanie minimum i maksimum 3n/2 – 2 optymalny Porządkowanie elementów n 2 – przez wybór; n log n – przez scalanie – optymalny Schemat Hornera n mnożeń i n dodawań optymalny informatyka +

Problemy trudne, 2 – liczby pierwsze, ponownie Problemy dotyczące liczb pierwszych: Dana jest liczba n – czy n jest liczbą pierwszą (złożoną)? 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 Szyfr RSA jest bezpieczny! informatyka +

Problemy trudne, 3 – podnoszenie do potęgi, again Kryptografia: Chcemy obliczać: 123456789098765432123456789098765432112345678998765432112 34567890123456789098765432112345678909876543211234567890987654321 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 +

Podnoszenie do potęgi – łatwy problem 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ż log2n Razem: nie więcej niż 2*log2n Długość rozwinięcia binarnego liczb: A zatem, obliczenie x12345678901234567890123456789012345 algorytmem rekurencyjnym to ok.… 200 mnożeń informatyka +

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

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 +

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 +