Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

ALGORYTMY I STRUKTURY DANYCH

Podobne prezentacje


Prezentacja na temat: "ALGORYTMY I STRUKTURY DANYCH"— Zapis prezentacji:

1 ALGORYTMY I STRUKTURY DANYCH
WYKŁAD 10 Kolejki priorytetowe i słowniki Grażyna Mirkowska PJWSTK,

2 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. G. Mirkowska, ASD_10 Kolejki priorytetowe i słowniki

3 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  EtB0 spełniające następujące postulaty : Definicja Sygnatura struktury 1. < Et,  > jest zbiorem liniowo uporządkowanym. G. Mirkowska, ASD_10 Kolejki priorytetowe i słowniki

4 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 member(min(q),q)  member(min(q), delmin(q)) e  min(q)  member(e, q)  member(e, delmin(q)) G. Mirkowska, ASD_10 Kolejki priorytetowe i słowniki

5 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 } G. Mirkowska, ASD_10 Kolejki priorytetowe i słowniki

6 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_10 Kolejki priorytetowe i słowniki

7 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 G. Mirkowska, ASD_10 Kolejki priorytetowe i słowniki

8 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 G. Mirkowska, ASD_10 Kolejki priorytetowe i słowniki

9 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 G. Mirkowska, ASD_10 Kolejki priorytetowe i słowniki

10 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 (aA’)(bB’) 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) G. Mirkowska, ASD_10 Kolejki priorytetowe i słowniki

11 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_10 Kolejki priorytetowe i słowniki

12 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) G. Mirkowska, ASD_10 Kolejki priorytetowe i słowniki

13 Specyfikacja słowników
Jeśli e włożymy do słownika s, to member stwierdzi należenie tego elementu do s. member(e, insert(e,s)) e  e’  member(e’, s)  member(e’,insert(e,s)) Delete usuwa tylko wskazany element  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) 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_10 Kolejki priorytetowe i słowniki

14 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? G. Mirkowska, ASD_10 Kolejki priorytetowe i słowniki

15 Najprostszy model - adresowanie bezpośrednie
2 e1 tablica 5 e2 7 e3 1 n-1 Card (U) = n U 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 Zbyt wiele „dziur”. G. Mirkowska, ASD_10 Kolejki priorytetowe i słowniki

16 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) G. Mirkowska, ASD_10 Kolejki priorytetowe i słowniki

17 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) G. Mirkowska, ASD_10 Kolejki priorytetowe i słowniki

18 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 G. Mirkowska, ASD_10 Kolejki priorytetowe i słowniki

19 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) G. Mirkowska, ASD_10 Kolejki priorytetowe i słowniki

20 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 G. Mirkowska, ASD_10 Kolejki priorytetowe i słowniki


Pobierz ppt "ALGORYTMY I STRUKTURY DANYCH"

Podobne prezentacje


Reklamy Google