ALGORYTMY I STRUKTURY DANYCH WYKŁAD 10 Kolejki priorytetowe i słowniki Grażyna Mirkowska PJWSTK, 2004
G. Mirkowska, ASD_10 Kolejki priorytetowe i słowniki Plan wykładu Kolejki priorytetowe Specyfikacja Zastosowania Słowniki Implementacja - Tablice hash Wiele zastosowań wymaga tworzenia i przechowywania dynamicznego na którym wykonuje się operacje typowe dla slowników: insert, search, delete. Tablice hash jest efektywną stukturą danych do implementacji słownika:przy rozsądnych założeniach operacje wykonuje sie z kosztem stałym. 2019-02-22 G. Mirkowska, ASD_10 Kolejki priorytetowe i słowniki
G. Mirkowska, ASD_10 Kolejki priorytetowe i słowniki Strukturę danych nazywamy kolejką priorytetową wttw jej uniwersum składa się z dwóch rozłącznych zbiorów E i Q oraz określone są następujące relacje i operacje insert : E Q Q delmin : Q Q min : Q E member : E Q B0 empty : Q B0 : E EtB0 spełniające następujące postulaty : Definicja Sygnatura struktury 1. < Et, > jest zbiorem liniowo uporządkowanym. 2019-02-22 G. Mirkowska, ASD_10 Kolejki priorytetowe i słowniki
Specyfikacja kolejek priorytetowych 1 2. empty(q) ((e) member(e,q) min(q) e) insert(e,q) powoduje umieszczenie elementu e w kolejce q o ile go tam nie było 3. member(e, insert(e,q)) e e’ member(e’, q) member(e’,insert(e,q)) insert(e,q) powoduje usunięcie tylko elementu minimalnego 4. member(min(q),q) member(min(q), delmin(q)) e min(q) member(e, q) member(e, delmin(q)) 2019-02-22 G. Mirkowska, ASD_10 Kolejki priorytetowe i słowniki
Specyfikacja kolejek priorytetowych 2 5. while (not empty(q)) do q := delmin(q) od true Każda kolejka jest skończona Jeśli element e należy do kolejki q, to po skończonej liczbie usunięć kolejnych elementów minimalnych dotrę do tego elementu 6. member(e,q) P bool P : {bool := false; while(not empty(q) and not bool ) do bool := (min(q)=e); q:=delmin(q) od } 2019-02-22 G. Mirkowska, ASD_10 Kolejki priorytetowe i słowniki
Zbiór możliwych elementów kolejek Model standardowy PQ(E) = E Fin(E), insert, delmin, min, member, empty, Zbiór możliwych zawartości kolejek, tzn. zbiór skończonych podzbiorów zbioru E gdzie insert(e, q) =df q {e} delmin (q) =df q \ {min(q)} min(q) = df minimum{e: e q} member(e,q) df e q jest relacją liniowego porządku w zbiorze etykiet E. ax 2019-02-22 G. Mirkowska, ASD_10 Kolejki priorytetowe i słowniki
Twierdzenie o reprezentacji Każdy model specyfikacji Kolejek Priorytetowych jest izomorficzny z pewnym modelem standardowym. Zbiór modeli dla specyfikacji kolejek prio- rytetowych Modele standardowe E E izomorfizm 2019-02-22 G. Mirkowska, ASD_10 Kolejki priorytetowe i słowniki
G. Mirkowska, ASD_10 Kolejki priorytetowe i słowniki Przykład 1: sortowanie Dany jest zbiór X, podzbiór pewnej liniowo uporządkowanej przestrzeni E, <E, >. Uporządkować elementy zbioru X rosnąco. Zadanie Rozwiązanie {i:=1; While not empty(pq) do e[i] := min(pq); pq := delmin(pq); i := i+1; od;} 1. Utworzyć kolejkę priorytetową pq, której elementami są elementy zbioru X i 2. wykonać algorytm 2019-02-22 G. Mirkowska, ASD_10 Kolejki priorytetowe i słowniki
G. Mirkowska, ASD_10 Kolejki priorytetowe i słowniki Poprawność algorytmu Niezmiennik {i:=1; While (not empty(pq) ) do e[i] := min(pq); pq := delmin(pq); i := i+1; od; } e[1] e[2]... e[i-1] Min(pq) jest najmniejszym elementem w pq, czyli min(pq) jest najmniejszym elementem w X-{e[1],...,e[i-1]} e[j] e[i] dla j=1,2,...i-1 e[1] e[2]... e[i-1] e[i] e[1] e[2]... e[i-1] ax1 ax2 2019-02-22 G. Mirkowska, ASD_10 Kolejki priorytetowe i słowniki
Przykład 2 : podział zbioru Dane są zbiory A, B i C w pewnej przestrzeni liniowo uporządkowanej <E, > takie, że card(A) = n, card(B) = m, A B= C, A B = . Zadanie Znaleźć podział zbioru C na podzbiory A’ i B’ takie, że card(A’) = n card(B’) = m i (aA’)(bB’) a b. Przykład A: 3, 15, 1, 9, 10, 23, 8, 17 Na tym przykładzie chciałabym pokazać, jak stosuje się postulaty KolejekPriorytetowych do dowodzenia poprawności programów. 4, 5, B: 24, 5, 18, 12, 4 17, 23, metoda max(A) min(B) 2019-02-22 G. Mirkowska, ASD_10 Kolejki priorytetowe i słowniki
Algorytm- podział zbioru B - kolejka priorytetowa z porządkiem A kolejka priorytetowa z porządkiem -1 while (not min(A) min(B)) do a := min(A); b := min(B); A := insert(b,delmin(A)); B := insert(a, delmin(B)) od Card(A)=n card(B)=m, A B= C, A B = . Niezmiennik min(A) min(B) 2019-02-22 G. Mirkowska, ASD_10 Kolejki priorytetowe i słowniki
G. Mirkowska, ASD_10 Kolejki priorytetowe i słowniki Strukturę danych nazywamy słownikiem wttw jej uniwersum składa się z dwóch rozłącznych zbiorów E i S oraz określone są następujące relacje i operacje insert : E S S delete : E S S member : E S B0 amb : S E empty : S B0 spełniające następujące postulaty : Definicja 1. empty(s) (e) member(e,s) 2. empty(s) member(amb(s),s) 2019-02-22 G. Mirkowska, ASD_10 Kolejki priorytetowe i słowniki
Specyfikacja słowników Jeśli e włożymy do słownika s, to member stwierdzi należenie tego elementu do s. 3. member(e, insert(e,s)) e e’ member(e’, s) member(e’,insert(e,s)) Delete usuwa tylko wskazany element 4. member(e, delete(e,s)) e e’ member(e, s) member(e, delete(e’,s)) Każdy słownik jest skończony 5. while (not empty(s)) do s := delete(amb(s),s) od empty(s) 6. member(e,s) P bool P : {bool := false; while(not empty(s) and not bool ) do e’ := amb(s); bool := (e’=e); s:=delete(e’, s) od } 2019-02-22 G. Mirkowska, ASD_10 Kolejki priorytetowe i słowniki
G. Mirkowska, ASD_10 Kolejki priorytetowe i słowniki Model standardowy SŁ(E) = E Fin(E), insert, delete, amb, member, empty insert(e, s) =df s {e} delete (e, s) =df s \ {e} amb(s) dowolna funkcja określona na elementach s member(e,s) df e s gdzie Możliwe modele: BST AVL A jakie są koszty operacji słownikowych w tych modelach? 2019-02-22 G. Mirkowska, ASD_10 Kolejki priorytetowe i słowniki
Najprostszy model - adresowanie bezpośrednie 2 e1 tablica 5 e2 7 e3 1 n-1 Card (U) = n U 2 5 7 Zbiór aktualnie używanych kluczy. Przypuśćmy, że zastosowanie wymaga zbioru dynamicznego, w którym wykonywac bedziemy operacje słownikowe : insert, delete, memeber. Przypuśćmy ponadto, że każdy element zbioru jest scharakteryzowany przez klucz, który należy do zbioru U={0,1,2...,n-1}. Uwaga! 1. Dobry koszt czasowy ale... 2. Zbyt wiele „dziur”. 2019-02-22 G. Mirkowska, ASD_10 Kolejki priorytetowe i słowniki
Tablice mieszające (hash-table) Funkcja mieszająca h : U {0,1,..., m-1} przy czym card(U) > m h(k1) Zaleta: zamiast używać tablicy o rozmiarze U, używamy tablicy o rozmiarze m m Element k1 k1 k2 k3 U h(k2) Element k2 Hash-table jest strukturą uogólniającą pojecie tablicy. Każdy element zamiast być bezpośrednio zapisany w tablicy pod adresem wskazanym przez klucz k, jest zapisywany pod adresem h(k), gdzie h jest pewną funkcją mieszającą. Element k3 h(k3) Wada : kolizje np.: h(k1) = h(k2) 2019-02-22 G. Mirkowska, ASD_10 Kolejki priorytetowe i słowniki
Rozwiązywanie kolizji Tablica kolejek k1 k2 k3 U m-1 h(k1) = h(k2 Element k1 Element k2 Element k3 Algorytmy dla operacji słownikowych insert(x,s) : Włóż x do kolejki Tab(h(k(x)) T(insert,s)=O(1) delete(x,s) : usuń x z kolejki Tab(h(k(x)) T(delete,s)=O(dłKol) member(x,s) : przeszukaj kolejkę Tab(h(k(x)) T(member,s)=O(dłKol) 2019-02-22 G. Mirkowska, ASD_10 Kolejki priorytetowe i słowniki
Szacowanie kosztów W najgorszym razie n , czyli card (U) Średnio n/m Jaka jest długość kolejki? a = n/m współczynnik charakterystyczny funkcji mieszającej Twierdzenie W tablicy hash w przypadku, gdy kolizje zostały rozwiązane przez kolejki, koszt nieudanego poszukiwania wynosi (1+a), o ile koszt obliczenia funkcji mieszającej jest stały. Twierdzenie Koszt skutecznego poszukiwania w tablicy hash wynosi średnio (1+a). uzasadnienie 2019-02-22 G. Mirkowska, ASD_10 Kolejki priorytetowe i słowniki
Przykłady funkcji mieszających Przykład 1 Uniwersum kluczy składa się z liczb naturalnych. h(k) = k mod m Przy takiej funkcji mieszającej trzeba unikać pewnych wartości m. Np. gdyby m = 2 p, to wartość h(k) zależałaby tylko od p ostatnich bitów rozwinięcia dwójkowego liczby k. Dobra liczba m, to liczba pierwsza niezbyt bliska potędze 2. Typowo jako m wybiera się potęgi 2, bo wtedy łatwiejsza jest implementacja funkcji h. Przykład 2 h(k) = m *(k *a –k * a ), gdzie a (0,1) 2019-02-22 G. Mirkowska, ASD_10 Kolejki priorytetowe i słowniki
G. Mirkowska, ASD_10 Kolejki priorytetowe i słowniki Uzasadnienie S k=1...n(1/n ( średni koszt znalezienia klucza k) = Sk=1..n (1/n ( 1+ Si=1..m(1/m (koszt znalezienia klucza k w itej kolejce) = Sk=1..n(1/n ( 1+ Si=1...m( 1/m (Sj=1.. a (j * 1/a))) = (1+a). Prawdopodobieństwo, że klucz k znajdzie się w itej kolejce na j-tej pozycji Koszt wyliczenia funkcji hash Prawdopodobieństwo, że klucz k trafi do itej kolejki Jeden z n kluczy 2019-02-22 G. Mirkowska, ASD_10 Kolejki priorytetowe i słowniki