ALGORYTMY I STRUKTURY DANYCH
description
Transcript of ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
WYKŁAD 11 Kolejki priorytetowe i słowniki
Grażyna MirkowskaPJWSTK, 2002
grudzień 2002 G. Mirkowska, ASD_11 Kolejki priorytetowe i słowniki 2
Plan wykładu
Kolejki priorytetowe – Specyfikacja– Zastosowania
Słowniki– Specyfikacja– Implementacja - Tablice hash
grudzień 2002 G. Mirkowska, ASD_11 Kolejki priorytetowe i słowniki 3
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 B0
empty : Q B0
: Et Et B0
spełniające następujące postulaty :1. < Et, > jest zbiorem liniowo uporządkowanym.
Sygnatura struktury
grudzień 2002 G. Mirkowska, ASD_11 Kolejki priorytetowe i słowniki 4
Specyfikacja kolejek priorytetowych 1
2. empty(q) ((e) member(e,q) min(q) e)
3.member(e, insert(e,q))
e e’ member(e’, q) member(e’,insert(e,q))
4. member(min(q),q)
member(min(q), delmin(q))
e min(q) member(e, q) member(e, delmin(q))
insert(e,q) powoduje umieszczenieelementu e w kolejce q
o ile go tam nie było
insert(e,q) powoduje usunięcie
tylko elementuminimalnego
grudzień 2002 G. Mirkowska, ASD_11 Kolejki priorytetowe i słowniki 5
Specyfikacja kolejek priorytetowych 2
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}
Każda kolejka jest skończona
5. while (not empty(q)) do q := delmin(q) od true
Jeśli element e należy do kolejki q, to
po skończonej liczbie usunięć kolejnych elementów minimalnych
dotrę do tego elementu
grudzień 2002 G. Mirkowska, ASD_11 Kolejki priorytetowe i słowniki 6
Model standardowy
PQ(E) = E Fin(E), insert, delmin, min, member, empty,
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.
Zbiór możliwych elementów
kolejek
Zbiór możliwych zawartości kolejek, tzn. zbiór skończonych
podzbiorów zbioru E
ax
grudzień 2002 G. Mirkowska, ASD_11 Kolejki priorytetowe i słowniki 7
Twierdzenie o reprezentacji
Każdy model specyfikacji Kolejek Każdy model specyfikacji Kolejek Priorytetowych jest izomorficzny Priorytetowych jest izomorficzny
z pewnym modelem standardowym.z pewnym modelem standardowym.
Zbiór modelidla specyfikacji
kolejek prio-rytetowych
Modele standardowe
E E
izomorfizm
grudzień 2002 G. Mirkowska, ASD_11 Kolejki priorytetowe i słowniki 8
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.
1. Utworzyć kolejkę priorytetową pq, której elementami są elementy zbioru X i 2. wykonać algorytm
{i:=1; While not empty(pq) do e[i] := min(pq); pq := delmin(pq); i := i+1; od;}
RozwiązanieRozwiązanie
grudzień 2002 G. Mirkowska, ASD_11 Kolejki priorytetowe i słowniki 9
Poprawność algorytmu
{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
NiezmiennikNiezmiennik
grudzień 2002 G. Mirkowska, ASD_11 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, żecard(A) = n, card(B) = m, A B= C, A B = .
Znaleźć podział zbioru C na podzbiory A’ i B’ takie, że card(A’) = n card(B’) = m i (aA’)(bB’) a b.
A: 3, 15, 1, 9, 10, 23, 8, 17 B: 24, 5, 18, 12, 4 4, 23,17, 5,PrzykładPrzykład
max(A) min(B)
grudzień 2002 G. Mirkowska, ASD_11 Kolejki priorytetowe i słowniki 11
Algorytm- podział zbioru
while (not min(A) min(B)) do
a := min(A); b := min(B);
A := insert(b,delmin(A)); B := insert(a, delmin(B))
od
A kolejka priorytetowa z porządkiem -1
B - kolejka priorytetowa z porządkiem
Card(A)=n card(B)=m, A B= C, A B = .
NiezmiennikNiezmiennik
min(A) min(B)
grudzień 2002 G. Mirkowska, ASD_11 Kolejki priorytetowe i słowniki 12
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 B0
amb : S Etempty : S B0
spełniające następujące postulaty :
1. empty(s) (e) member(e,s)
2. empty(s) member(amb(s),s)
grudzień 2002 G. Mirkowska, ASD_11 Kolejki priorytetowe i słowniki 13
Specyfikacja słowników
3. member(e, insert(e,s))
e e’ member(e’, s) member(e’,insert(e,s))
4. member(e, delete(e,s))
e e’ member(e, s) member(e, delete(e’,s))
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 }
Jeśli e włożymy do słownika s, to member stwierdzi należenie tego elementu do s.
Delete usuwa tylko wskazany
element
Każdy słownik
jest skończony
grudzień 2002 G. Mirkowska, ASD_11 Kolejki priorytetowe i słowniki 14
Model standardowy
SŁ(E) = E Fin(E), insert, delete, amb, member, empty
gdzie 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
Możliwe modele:Możliwe modele:
A jakie są koszty operacji słownikowych w tych modelach?
grudzień 2002 G. Mirkowska, ASD_11 Kolejki priorytetowe i słowniki 15
Najprostszy model - adresowanie bezpośrednie
U
Zbiór aktualnie używanych kluczy.
2 5 7
2 e1
tablica
5 e2
7 e3
1
n-11. Dobry koszt czasowy ale...2. Zbyt wiele „dziur”.
Card (U) = n
grudzień 2002 G. Mirkowska, ASD_11 Kolejki priorytetowe i słowniki 16
Tablice mieszające (hash-table)
h : U {0,1,..., m-1}
przy czym card(U) > m
Funkcja mieszająca
k1k2
k3
U
m
Element k1
Element k2
Element k3
ZaletaZaleta: zamiast używać tablicy o rozmiarze U, używamy tablicy o rozmiarze m
Wada Wada : kolizje np.: h(k1) = h(k2)
h(k1)
h(k2)
h(k3)
grudzień 2002 G. Mirkowska, ASD_11 Kolejki priorytetowe i słowniki 17
Rozwiązywanie kolizji
k1k2
k3
UTablica kolejek
m-1
0h(k1) = h(k2
Algorytmy dla operacji słownikowychAlgorytmy 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)
Element k1
Element k3
Element k2
grudzień 2002 G. Mirkowska, ASD_11 Kolejki priorytetowe i słowniki 18
Szacowanie kosztów
Jaka jest długość kolejki? W najgorszym razie n , czyli card (U)
Średnio n/m = n/m
współczynnik charakterystyczny funkcji mieszającej
TwierdzenieTwierdzenieW tablicy hash w przypadku, gdy kolizje zostały rozwiązane przez kolejki, koszt nieudanego poszukiwania wynosi (1+), o ile koszt obliczenia funkcji mieszającej jest stały.
TwierdzenieTwierdzenieKoszt skutecznego poszukiwania w tablicy hash wynosi średnio (1+).
uzasadnienie
grudzień 2002 G. Mirkowska, ASD_11 Kolejki priorytetowe i słowniki 19
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.
Przykład 2h(k) = m *(k *a –k * a ), gdzie a (0,1)
Typowo jako m wybiera się potęgi 2, bo wtedy łatwiejsza jest implementacja funkcji h.
grudzień 2002 G. Mirkowska, ASD_11 Kolejki priorytetowe i słowniki 20
Uzasadnienie
k=1...n(1/n ( średni koszt znalezienia klucza k) =
k=1..n (1/n ( 1+ i=1..m(1/m (koszt znalezienia klucza k w itej kolejce) =
k=1..nni=1...mmj=1.. j(1+).
Jeden z n kluczyKoszt wyliczenia funkcji hash
Prawdopodobieństwo, że klucz k trafi do itej kolejki
Prawdopodobieństwo, że klucz k znajdzie się w itej kolejce na j-tej pozycji