200 likes | 366 Views
ALGORYTMY I STRUKTURY DANYCH. WYKŁAD 11 Kolejki priorytetowe i słowniki Grażyna Mirkowska PJWSTK, 2002. Plan wykładu. Kolejki priorytetowe Specyfikacja Zastosowania Słowniki Specyfikacja Implementacja - Tablice hash. Kolejki priorytetowe.
E N D
ALGORYTMY I STRUKTURY DANYCH WYKŁAD 11 Kolejki priorytetowe i słowniki Grażyna Mirkowska PJWSTK, 2002
Plan wykładu • Kolejki priorytetowe • Specyfikacja • Zastosowania • Słowniki • Specyfikacja • Implementacja - Tablice hash G. Mirkowska, ASD_11 Kolejki priorytetowe i słowniki
Kolejki priorytetowe • Strukturę danych nazywamy kolejką priorytetową wttw jej uniwersum składa się z dwóch rozłącznych zbiorów Et i Q oraz określone są następujące relacje i operacje • insert : Et Q Qdelmin : Q Qmin : Q Etmember : E Q B0empty : Q B0 : Et Et B0 • spełniające następujące postulaty : Definicja Sygnatura struktury 1. < Et, > jest zbiorem liniowo uporządkowanym. G. Mirkowska, ASD_11 Kolejki priorytetowe i słowniki
Specyfikacja kolejek priorytetowych 1 2. empty(q) ((e) member(e,q) min(q) e) insert(e,q) powoduje umieszczenieelementu e w kolejce qo 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 elementuminimalnego 4. member(min(q),q) member(min(q), delmin(q)) e min(q) member(e, q) member(e, delmin(q)) G. Mirkowska, ASD_11 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, topo skończonej liczbie usunięć kolejnych elementów minimalnychdotrę 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} G. Mirkowska, ASD_11 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 G. Mirkowska, ASD_11 Kolejki priorytetowe i słowniki
Twierdzenie o reprezentacji Każdy model specyfikacji Kolejek Priorytetowych jest izomorficzny z pewnym modelem standardowym. Zbiór modeli dla specyfikacjikolejek prio-rytetowych Modele standardowe E E izomorfizm G. Mirkowska, ASD_11 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 G. Mirkowska, ASD_11 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 G. Mirkowska, ASD_11 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, żecard(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 4, 5, B: 24, 5, 18, 12, 4 17, 23, metoda max(A) min(B) G. Mirkowska, ASD_11 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) G. Mirkowska, ASD_11 Kolejki priorytetowe i słowniki
Słowniki • Strukturę danych nazywamy słownikiem wttw jej uniwersum składa się z dwóch rozłącznych zbiorów Et i S oraz określone są następujące relacje i operacje • insert : Et S Sdelete : Et S Smember : Et S B0amb : S Etempty : S B0 • spełniające następujące postulaty : Definicja 1. empty(s) (e) member(e,s) 2. empty(s) member(amb(s),s) G. Mirkowska, ASD_11 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 } G. Mirkowska, ASD_11 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? G. Mirkowska, ASD_11 Kolejki priorytetowe i słowniki
tablica 1 2 e1 5 e2 7 e3 n-1 Najprostszy model - adresowanie bezpośrednie Card (U) = n U 2 5 7 Zbiór aktualnie używanych kluczy. Uwaga! 1. Dobry koszt czasowy ale...2. Zbyt wiele „dziur”. G. Mirkowska, ASD_11 Kolejki priorytetowe i słowniki
h(k1) Element k1 h(k2) U Element k2 m k2 k1 k3 Element k3 h(k3) Tablice mieszające (hash-table) Funkcja mieszająca h : U {0,1,..., m-1} przy czym card(U) > m Zaleta: zamiast używać tablicy o rozmiarze U, używamy tablicy o rozmiarze m Wada : kolizje np.: h(k1) = h(k2) G. Mirkowska, ASD_11 Kolejki priorytetowe i słowniki
0 Element k1 Element k2 U k2 m-1 Element k3 k1 k3 Rozwiązywanie kolizji Tablica kolejek h(k1) = h(k2 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) G. Mirkowska, ASD_11 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. TwierdzenieKoszt skutecznego poszukiwania w tablicy hash wynosi średnio (1+a). uzasadnienie G. Mirkowska, ASD_11 Kolejki priorytetowe i słowniki
Przykłady funkcji mieszających Przykład 1Uniwersum 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 2h(k) = m *(k *a –k * a ), gdzie a (0,1) G. Mirkowska, ASD_11 Kolejki priorytetowe i słowniki
Uzasadnienie Sk=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 G. Mirkowska, ASD_11 Kolejki priorytetowe i słowniki