Krzysztof Diks Instytut Informatyki Uniwersytet Warszawski Pięć algorytmów, o których każdy wiedzieć powinien - wybór osobisty
David Harel: ALGORITHMICS. The Spirit of Computing. (Rzecz o istocie informatyki. Algorytmika.) Przepisy określiliśmy mianem algorytmów, obszar zaś ludzkich dociekań, wiedzy i doświadczeń dotyczących algorytmów nazwiemy algorytmiką. Algorytmika to więcej niż dział informatyki. Tkwi ona w centrum wszystkich działów informatyki
Donald E. Knuth: The art of computer programming (Sztuka programowania) Proces przygotowywania programu dla komputera cyfrowego jest pociągający nie tylko ze względu na potencjalne korzyści ekonomiczne czy naukowe. Wiążą się z nim również przeżycia estetyczne, podobne do tworzenia poezji lub komponowania muzyki. W dziedzinie programowania komputerów algorytm to rzecz podstawowa.
Bardzo krótka historia algorytmów około 350 p.n.e.: Algorytm Euklidesa IX wiek, Muhammed Alchwarizmi (lać. Algorismus): reguły dodawania, odejmowania, mnożenia i dzielenia zwykłych liczb dziesiętnych; rozwiązywanie równa liniowych i kwadratowych 1845, Lamé: analiza złożoności algorytmu Euklidesa ( co najwyżej 4.8 log(n)/log(10) - 0.32 kroków )
Bardzo krótka historia algorytmów 1936, Alan Turing: maszyna Turinga model obliczeń ogólnego przeznaczenia 1947, George Dantzig: metoda sympleks 1959, Edsger Wybe Dijkstra: najkrótsze ścieżki 1961, C.A.R. Hoare: Quicksort 1965, Edmonds: wielomianowa, a wykładnicza złożoność
Bardzo krótka historia algorytmów 1971, Stephen Cook: NP-zupełność problemu SAT 1971, Richard Karp: NP-zupełność ośmiu kluczowych problemów kombinatorycznych (redukcja Karpa) 1977, R. Rivest, A. Shamir, L. Adleman: RSA 2002, M. Agrawal, N. Kayal, N. Saxena: wielomianowy test pierwszości
Parametry jakości algorytmu: Poprawność (zgodność ze specyfikacją): częściowa poprawność, własność stopu, określoność obliczeń Złożoność obliczenia: czasowa i pamięciowa; pesymistyczna i oczekiwana
Algorytm 1 Najkrótsze ścieżki - Dijkstra
Edsger Wybe Dijkstra 1930-2002
For a demonstration for noncomputing people you have to have a problem statement that non-mathematicians can understand; they even have to understand the answer. So I designed a program that would find the shortest route between two cities in the Netherlands, using a somewhat reduced roadmap of the Netherlands, on which I had selected 64 cities (so that in the coding six bits would suffice to identify a city). What s the shortest way to travel from Rotterdam to Groningen? It is the algorithm for the shortest path, which I designed in about 20 minutes.
Google scholar:
Algorytm 2 QuickSort
Donald E. Knuth: Problematyka sortowania i wyszukiwania nadaje się do omówienia kilku ważnych zagadnień natury ogólnej: W jaki sposób tworzyć dobre algorytmy? W jaki sposób poprawiać istniejące programy i algorytmy? W jaki sposób matematycznie analizować efektywność algorytmów? Jak dokonywać racjonalnego wyboru między różnymi algorytmami dla tego samego zadania? Co to znaczy, że algorytm jest najlepszy z możliwych? Jak oddziałują na siebie teoria i praktyka? W jaki sposób efektywnie wykorzystać pamięci zewnętrzne, takie jak taśmy, bębny i dyski, w dużych bazach danych?
QuickSort idea: QS(X: (multi-)zbiór do posortowania); begin if X > 1 then begin niech x będzie elementem X; podziel X na zbiory M, {x}, W takie, że M = {m: m <= x} W = {w: w >= x} oraz M + W + 1 = X ; QS(M); wypisz x; QS(W) end end;
Składowe sort w C++: 1. QuickSort (Hoare, 1961) 2. HeapSort (Wiliams, 1964) 3. InsertionSort (folklor, lata 50-te XX wieku) Razem: IntroSort (Introspective Sorting)
Algorytm 3 System krytpograficzny RSA
System kryptograficzny (RSA) Rivest-Shamir-Adleman Fakt z teorii liczb: Niech p i q będą różnymi liczbami pierwszymi i niech N=pq. Wówczas dla dowolnej dodatniej liczby całkowitej e względnie pierwszej z (p-1)(q-1) zachodzi: 1. Funkcja f: {0,1,, N-1} -> {0,1,, N-1} określona jako f(x) = x^e mod N, jest różnowartościowa. 2. Jeśli d jest odwrotnością e modulo (p-1)(q-1), to dla każdego x ze zbioru {0,1,, N-1}, (x^e)^d x mod N
Algorytm 4 PageRank
1,062,660,523 Jak wielki jest Internet? Estimated size of Google's index: 49*10^9 (Wednesday, 27 September, 2017). Internet System Consortium # hosts Jan 2017 1,062,660,523 Jan 2016 1,048,766,623 Jan 2014 1,028,544,414 Jan 2013 926,230,757 Jan 2008 541,677,360 Jan 2001 109,574,429 Jan 2000 72,398,092
Topologia WWW (A. Broder et al. 9th WWW Conference, 2000)
Czym charakteryzuje się sieć WWW? -Sieć skierowana -Miliardy węzłów (Broder: 2.7*10^8 URLi) -Sieć jest rzadka (Broder: 2.13*10^9 linków) -Mała średnica (eksperyment Brodera: średnia długość zorientowanej ścieżki 16; średnia długość niezorientowanej ścieżki - 6)
Kilka podstawowych problemów algorytmicznych związanych z siecią WWW -wyszukiwanie i składowanie stron (zawartości) -indeksowanie -przetwarzania zapytań -odpowiadanie na zapytania w sposób zadowalający użytkownika -zgłębianie i analiza sieci WWW
1 1/4 1/2 1/2 3 1/2 1/2 1/4 2 1/4 1 1/4 4 5 1 6 In(2) I = {1,3,6}; Out(2) = {1,3,4,5}
PageRank, Brin & Page, 1998 ważność strony o nr i: R(i) = j ε We(i) R(j)/ Wy(j) Ważności obliczamy iteracyjnie. Początkowo wszystkie ważności są równe i wynoszą 1/n, gdzie n to liczba stron. Jeżeli przez R k (i) oznaczymy ważność strony i po wykonaniu k-tej iteracji, to R k+1 (i) = j ε We(i) R k (j)/ Wy(j)
PageRank, Brin & Page, 1998 Rozważmy macierz H o wymiarach nxn i taką, że H[i,j] = 1/ Wy(i) gdy istnieje połączenie od strony i do strony j, a 0 w przeciwnym przypadku. Niech R[1..n] będzie wektorem rang. Wówczas jedną iterację możemy zapisać jako: R (k+1)t = R (k)t H
Algorytm PageRank Obserwacje: -Każda iteracja kosztuje O(n^2) operacji arytmetycznych. -Szczęśliwie macierz H jest rzadka. Mnożenie można wykonać w czasie O(Nz(H)), czyli w praktyce O(n). -H jest prawie stochastyczną macierzą przejść. - Prawie powoduje, że węzeł lub grupy węzłów mogą pochłaniać rangi. -Problem stanowią też cykle, (np. O< >O).
Algorytm 5 Równoległość kontrakcja drzewa
Wojciech Rytter
Model komputera równoległego PRAM Parallel Random Access Machine Wspólna pamięć procesory P P P 1 P n- 2 P n- 3 2 2 P n Sterowanie
Podstawowa konstrukcja programistyczna for each x in X //do Instrukcja(x); obliczenia synchroniczne: odczyt ze wspólnej pamięci obliczenia lokalne zapis do wspólnej pamięci
Proste programy sekwencyjne Ciąg instrukcji przypisania x 1 := w 1 ; x 2 := w 2 ; x 3 := w 3 ; x n := w n ; nazywamy prostym programem sekwencyjnym, jeżeli wyrażenie w i (arytmetyczne) zawiera tylko zmienne o numerach < i lub stałe. Jeżeli P jest prostym programem sekwencyjnym, to przez graf(p) nazywamy graf skierowany o wierzchołkach będących zmiennymi i krawędziach łączących zmienną x i ze zmienną x j, jeżeli tylko x i, występuje w wyrażeniu w j. Będziemy rozważać tylko proste programy sekwencyjne, których grafy są drzewami binarnymi.
Obliczanie wartości wyrażenia arytmetycznego W = 2*(3*(x 1 + x 2 ) + 2*(2* x 3 ) + 2)) + x 4 Niech x 1 = 1, x 2 = 2, x 3 = 3, x 4 = 4. Oto prosty program sekwencyjny obliczający W. x 1 := 1; x 2 := 2; x 3 := 3; x 4 := 4; x 5 := 2*x 3 ; x 6 := x 5 + 2; x 7 := x 1 + x 2 ; x 8 := 3*x 7 + 2*x 6 ; x 9 := 2*x 8 + x 4 ; Powiemy, że zmienna x i jest bezpieczna, gdy wyrażenie w i zawiera co najwyżej jedną zmienną.
Równoległe obliczanie prostych programów sekwencyjnych repeat for each i = 1, 2,, n // do if x i bezpieczna then redukcja(x i ); until x n policzone; redukcja: zastąpienie zmiennej przez jej wyrażenie i maksymalne uproszczenie tak otrzymanego wyrażenia
43
Robert Bogucki Marek Cygan Maciej Klimek Jan Kanty Milczek Marcin Mucha
Quirin Fischer Rafał Józefowicz Jakub Pachocki Christopher Hesse Szymon Sidor Greg Brockman Shariq Hashme Jie Tang Przemyslaw Debiak Jeremy Schlatter Ilya Sutskever Tim Salimans Christopher Berner Catherine Olsson Jonas Schneider Vicki Cheung
Dziękuję!