algorytmika internetu -...
TRANSCRIPT
Czym jest 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”
David Harel: ALGORITHMICS. The Spirit of Computing.
(Rzecz o istocie informatyki. Algorytmika.)
informatyka + 3
Krótko o długiej historii algorytmiki
około 350 p.n.e.: algorytm Euklidesa
IX wiek, Muhammed Alchwarizmi: reguły dodawania,
odejmowania, mnożenia i dzielenia zwykłych liczb
dziesiętnych
1845, Lamé: analiza złożoności algorytmu Euklidesa ( co
najwyżej 4.8 log(N)/log(10) - 0.32 kroków )
1936, Alan Turing: maszyna Turinga – model obliczeń
ogólnego przeznaczenia
1947, George Dantzig: metoda sympleks
informatyka + 4
Krótko o długiej historii algorytmiki
1962, C.A.R. Hoare: Quicksort
1965, Edmonds: wielomianowa, a wykładnicza
złożoność
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
informatyka + 5
Przykłady problemów algorytmicznych
Lider
Dane: skończony ciąg liczb całkowitych a[1], a[2], …, a[n], dla pewnego n > 0.
Wynik: liczba całkowita x taka, że
|{i: a[i] = x}| > n/2, o ile takie x istnieje; w przeciwnym przypadku dowolny element z ciągu a
Rozmiar zadania: n – długość ciągu
Lider x := pierwszy element ciągu; licz := 1;
while nie koniec ciągu do {
y := kolejny element ciągu;
if licz = 0 then
{ x := y; licz := 1}
else
if x = y then
licz := licz +1
else licz := licz – 1
}
return x;
Lider - przykład
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
a: 3 1 2 3 3 2 3 3 1 3 3 3 2 2 2 2 2
x: 3 3 2 2 3 3 3 3 3 3 3 3 3 3 3 3 2
licz:1 0 1 0 1 0 1 2 1 2 3 4 3 2 1 0 1
Mnożenie macierzy przez wektor Dane: liczba naturalna n > 0, macierz rzeczywista
A[1..n,1..n], wektor rzeczywisty x[1..n]
Wynik: wektor y[1..n] = Ax, gdzie
y[i] = A[i,1]*x[1] + A[i,2]*x[2] + … + A[i,n]*x[n]
Algorytm Macierz_x_Wektor::
for i := 1 to n do{
y[i] := 0;
for j := 1 to n do
y[i] := y[i] + A[i,j]*x[j]
}
return y;
Analiza algorytmu mnożenia macierzy przez wektor
Rozmiar zadania: n^2
Złożoność czasowa: Θ(n^2), n^2 mnożeń
n = 100 000 000; szybkość komputera 10^8 instrukcji na sekundę; czas obliczeń - 100 000 000 sekund ≈ 1600 dni
Do zapamiętania macierzy: 8*10^16 bajtów
Niech Nz(A) będzie liczbą niezerowych elementów w A.
Wówczas liczba mnożeń wynosi Nz(A).
Silnie spójne składowe Dane: G=(V,E) – graf skierowany.
Wynik: funkcja s: V {1,…,|V|} taka, że dla każdej pary
węzłów u, v, s(u) = s(v) wtedy i tylko wtedy, gdy istnieją ścieżki w grafie G z u do v i z v do u.
Możliwe reprezentacje grafu:
- macierz sąsiedztwa: A[1..|V|,1..|V|], A[u,v] є {0,1}, A[u,v] = 1 (u,v) є E
rozmiar: Θ(|V|^2)
- listy sąsiedztwa: L[1..|V|], L[u] – lista węzłów, do których prowadzą krawędzie z u
rozmiar: Θ(|V|+|E|)
Silnie spójne składowe – faza I W_przód(v: węzeł){
ost_nr := ost_nr + 1; nr[v] := ost_nr; // ost_nr – ostatnio nadany // numer
wezly[ost_nr] := v; // porządkowanie węzłów według numerów
for each u – węzeł na liście w przód węzła v do
if nr[u] = 0 then // nr[u] = 0 oznacza, że węzeł nie został
// odwiedzony
W_przód(u);
w_poddrzewie[v] := ost_nr – nr[v] + 1 // rozmiar //poddrzewa w przód
}
Silnie spójne składowe – faza I
Przeszukiwanie w przód::
ost_nr := 0;
for each węzeł v do nr[v] := 0;
for each węzeł v do
if nr[v] = 0 then W_przód(v);
Silnie spójne składowe – faza II
W_tył(v: węzeł, id_s: 1..|V| ){ // id_s – id aktualnie // wykrywanej składowej
s[v] := id_s;
for each węzeł u na liście w tył węzła v do
if ( (s[u] = 0) // u nie był jeszcze odwiedzony
AND // oraz
(nr[id_s] < nr[u] < nr[id_s]+w_poddrzewie[id_s])) // jest w poddrzewie id_s
then W_tył(u, id_s);
}
Silnie spójne składowe – faza II
Przeszukiwanie w tył::
for each węzeł v do s[v] := 0; // s[v] = 0 oznacza, że // v nie był odwiedzony
for i := 1 to |V| do
if s[wezly[i]] = 0 then
W_tył(wezly[i], wezly[i]);
Krótko o krótkiej historii Internetu
1969 Powstaje ARPANET (Stanford Research Institute, UCLA, UC Santa Barbara, the University of Utah); pierwszy komunikat przesłany z UCLA do SRI
1974 Transmission Control Protocol
1975 Początki Microsoftu
1976 Unix; pierwszy e-mail wysłany przez królową Elżbietę
1979 Powstaje Usenet (matka grup dyskusyjnych)
1981 Pojawia się IBM PC
1982 Narodziny nazwy „Internet”; protokól TCP/IP
1987 Liczba „hostów” w Internecie przekracza 10 000
1989 Liczba „hostów” w Internecie przekracza 100 000
Krótko o krótkiej historii Internetu 1990 ARPANET przechodzi do historii, liczba „hostów” przekracza
300 000
1991 Narodziny World Wide Web
1992 Liczba „hostów” przekracza 1 000 000
1993 Pojawia się Mosaic, pierwsza graficzna przeglądarka
1994 Powstaje Netscape, pojawia się Yahoo
1995 Powstaje wyszukiwarka AltaVista; Internet Explorer
1998 Pojawia się Google
1999 Odpalony zostaje Napster
2000 Udostępniony zostaje komunikator Gadu-Gadu
2001 Serwis gier Kurnik
2004 Start serwisu Facebook
2006 Narodziny Naszej-klasy
Jak wielki jest Internet?
The Indexed Web contains at least 13.16 billion pages (Sunday, 02
January, 2011).
Google: about 21 billion pages.
# hosts
Jan 2010 732 740 444
Jan 2009 625 226 456
Jan 2008 541 677 360
Jul 2007 489 774 269
Jan 2007 433 193 199
Jul 2006 439 286 364
Jan 2006 394 991 609
Jul 2005 353 284 187
Jan 2005 317 646 084
Internet System Consortium
Countries Total IPs
240 3 300 466 944
Poland 16 731 391 (21. miejsce w świecie)
http://www.domaintools.com
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
Algorytm PageRank Sergiej Brin i Lary Page, 1998
Pięć pierwszych odpowiedzi na zapytanie „matematyka” wybranych przez Google.pl spośród 4 970 000 kandydatów:
(1) www.matematyka.org,
(2) www.matematyka.pisz.pl,
(3) pl.wikipedia.org/wiki/Matematyka,
(4) www.matematyka.org,
(5) www.math.edu.pl.
Algorytm PageRank
S1, S2, …, Sn – strony;
w(Si) – ranga (ważność), liczba rzeczywista dodatnia
Żądamy, żeby
Początkowo wszystkie rangi wynoszą 1/n. Rangi obliczamy iteracyjnie (proces 1):
Algorytm PageRank
Związek procesu iteracyjnego z mnożeniem macierzy przez wektor.
Macierz H opisuje sieć W
Wówczas proces 1 możemy zapisać jak następuje:
H jest macierzą rzadką!!!
Algorytm PageRank
Proces 2 uwzględnia fakt, że są strony nie zawierające
żadnych dowiązań.
W macierzy H kolumny odpowiadające takim stronom
zawierają same 0.
Z takich stron do dalszego przeszukiwania wybieramy
dowolną stronę z prawdopodobieństwem 1/n.
W podejściu macierzowym wystarczy zatem zastąpić
w macierzy H wszystkie kolumny zawierające same 0
przez kolumny posiadające na każdej pozycji wartość 1/n.
Oznaczmy tak powstałą macierz przez S.
Wówczas proces 2 ma postać:
Algorytm PageRank
Proces 3 to zmodyfikowany proces 2, w którym
z prawdopodobieństwem α kontynuujemy przeszukiwanie
sieci z danej strony, a z prawdopodobieństwem (1 – α)
przechodzimy do losowej strony.
Oznacza to następującą modyfikację macierzy S: każdą
pozycję macierzy S mnożymy przez α i dodajemy do tego
(1 – α)/n.
Tak otrzymaną macierz oznaczmy przez G.
Proces 3 w zapisie macierzowym:
Uwaga: G nie jest macierzą rzadką!!!
Algorytm PageRank
Mnożenie przez macierz rzadką:
Do każdego elementu wektora wk+1 dodaj βk.
W Google za α przyjmuje się 0.85.
Podsumowanie
Lider – analiza ruchu pakietów w sieci
Mnożenie macierzy przez wektor – ustalanie ważności stron
Silnie spójne składowe – analiza struktury Internetu
Wiele problemów i ich rozwiązań czeka na swoich odkrywców – może to będziesz Ty!!!