200 likes | 382 Vues
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