Łukasz Dubiel
Noc Informatyka 1.0
http://slides.com/bambucha/probabilistyczne-algorytmy-i-struktury-danych/live
- przestrzeń zdarzeń z miarą
- podprzestrzeń sprzyjająca wydarzeniu
Algorytm - skończony opis kroków potrzebnych do wykonania zadania
Algorytm probabilistyczny - algorytm wykorzystujący w swoim działaniu generator liczb pseudolosowych
Algorytmy probabilistyczne
algorytmy
Las Vegas
algorytmy
Monte Carlo
Problem
Gdy quick sort dokonuje złego wyboru elementu złożoność bardzo się psuję.
Jednocześnie quick sort nie zależy do tego który element wybierze. Pierwszy, drugi, środkowy, medianę, jest mu to obojętne do działania. Zawsze zwróci posortowany ciąg.
Wybierzmy element dzielący w sposób losy
Kolejne wywołania rekurencyjne quicksorta są niezależne co dodatkowo zmniejsza szansę na zły podział
Quick sort mimo podziału na poziomie 99:1 dalej utrzymuje złożność
Sprawdzenie pierwszości liczby
Wejście: n - badana liczba, k - jakość badania
Wyjście: Złożona || Pierwsza
Powtórz k razy: a <- losowa liczba z [2, n-1] sprawdź czy a jest świadkiem dla n sprawdź czy x nie jest pierwiastkiem 1
Odpowiedź złożona jest zawsze poprawna, gdyż znaleziono przynajmniej jednego świadka złożności testowanej liczby
Jeżeli wszystkie testy przejdą poprawnie:
Do osiągnięcia prawdopodobieństwa wygrania w lotto potrzebne jest tylko 8 testów
Wykorzystywany w okolicach RSA do generowania kluczy
Algorytmy probabilistyczne
algorytmy
Las Vegas
algorytmy
Monte Carlo
jeżeli się skończą,
skończą się dobrze
na pewno się skończą,
ale nie zawsze dobrze
- ciąg skończony, tablica, element ciągu
- funkcje haszujące parami niezależne
- zbiór liczbowy
- długość ciągu
Zadanie: Chcemy znać częstość występowania wartości w ciągu
query(1) = 3
query(1000000000) = 1
query(4) = 2
query(6) = 0
Problem: Przestrzeń elementów jest duża
Problem: Strumień nie mieści się w pamięci
Problem: Nie chcemy alokacji (z wyjątkiem inicjalizacji)
Założenie: Nie potrzebujemy dokładnych danych, jesteśmy zadowoleni z aproksymacji
- szerokość aproksymacji
- szansa aproksymacji
CM sketch - insert
1 | 1 | 3 | 4 | 1 | 0 | 1 |
2 | 5 | 0 | 5 | 2 | 2 | 4 |
4 | 3 | 2 | 2 | 4 | 2 | 2 |
- rzeczywista częstotliwość
- query(i)
100%
Słabe, bo błąd się akumuluje dla każdego punktu. Czy można lepiej?
s1
s2
s3
s4
s1
s2
s3
s4
-kwantyl - wartość dla której
wystąpień w strumieniu jest mniejszych
Skoro wiemy jak zapytać o przedział to czemu by nie wyszukać binarnie tej wartości
dopókióki(przedział (1,k) zawiera za mało / dużo elementów ):
sprawdź ile elementów jest w przedziale (1,k) i (1,k+1)
popraw element dzielący
s1
s2
s3
s4
50
8
42
2
6
40
2
0
2
3
3
38
2
0
2
Klaster obliczeniowy 1000 maszyn, każda po 8 dysków 1TB => 8 PB danych w ramach klastra.
Aplikacje działające na klastrze korzystają z HDFS (Hadoop File System)
Redundancja bloku ustawiona na n=3
Replikacja realizowana jest w sposób losowy - wybierz dwie losowe maszyny dla bloku i wyślij kopie
Grupę Maszyny współdzielących blok nazywamy aktywnym copy-setem
Gdy wszystkie maszyny z copy-setu są niedostępne, tracimy dostęp do bloków przechowywanych przez niego
To ile właściwie jest tych copy-setów ?
Ile przypada pojemności na copy-set ?
Przez losowy wybór maszyn mamy bardzo dużo aktywnych copy-setów.
W momencie kiedy padną nam 3 losowe maszyny, jest duża szansa na to iż "trafimy" w jakiś aktywny copy-set.
Powoduje to niedostępność danych mimo wysokiego poziomu redundancji
Derandomizacja pomaga w uzyskaniu wyższej dostępności.
W przypadku długoterminowym nie ma różnicy pomiędzy podejściami ze względu na dostępność.
Jak tylko podejście do problemu może wpływać na dostępność danych.