ALGORYTMY I STRUKTURY DANYCH WYKŁAD 11 Algorytmy zachłanne Grażyna Mirkowska PJWSTK, 2004
G. Mirkowska, ASD_11 Algorytmy na grafach Plan wykładu Idea algorytmów zachłannych Problem kodowania Problem najkrótszych ścieżek Algorytm Dijksty 2019-01-17 G. Mirkowska, ASD_11 Algorytmy na grafach
G. Mirkowska, ASD_11 Algorytmy na grafach Na czym to polega? „Greedy” algorithms ZASADA W każdym kroku, w którym trzeba dokonać wyboru, wybierać zawsze rozwiązanie lokalnie optymalne, tzn. takie, które w danym momencie działania algorytmu jest najlepsze. 2019-01-17 G. Mirkowska, ASD_11 Algorytmy na grafach
G. Mirkowska, ASD_11 Algorytmy na grafach Problem kodowania Dany jest ciąg znaków. Chcemy tak zapisać ten ciąg w taki sposób, by zajmował jak najmniej miejsca i by dało się go potem łatwo odtworzyć. 100 000 znaków zajmuje 800 000 bitów. Znak = liczba 0-255, czyli 8 bitów 100 000 znaków zajmuje 300 000 bitów. Jeśli w naszych danych występuje tylko 6 różnych znaków, to 3 bity wystarczą do ich zakodowania, np.: 000,001,010,011,100,101 2019-01-17 G. Mirkowska, ASD_11 Algorytmy na grafach
Kody stałej i zmiennej długości Kody o stałej długości -- wszystkie słowa kodowe mają tę samą długość Kody o zmiennej długości -- długość słowa kodowego zależy od częstości występowania danego znaku w ciągu danych. Znaki występujące często powinny mieć kod możliwie krótki. Przykład Używając kodu a= 0, b= 101, c= 100, d=111, e=1101, f=1100 nasz tekst można zakodować na 224000bitach. Niech będzie tekst 100000 znakowy, w którym występują tylko litery a,b,c,d,e,f i a-45tys razy, b-13tys., c-12tys., d-16tys., e - 9tys., f-5tys. razy. 2019-01-17 G. Mirkowska, ASD_11 Algorytmy na grafach
Kody prefiksowe ZASADA Twierdzenie tzn. nie istnieją takie dwa słowa a i b, a=(a1,...an), b=(b1,b2...,bm) n<m , że dla pewnego i n a1= b1, a2= b2... , ai = bi ZASADA Żadne słowo kodowe nie jest prefiksem żadnego innego słowa kodowego. Twierdzenie Jeśli istnieje optymalne kodowanie, to zawsze można znaleźć kod prefiksowy, który go realizuje. Chodzi o to by można było jednoznacznie odczytać zakodowany tekst. 2019-01-17 G. Mirkowska, ASD_11 Algorytmy na grafach
G. Mirkowska, ASD_11 Algorytmy na grafach Drzewo kodowe (1) 100 86 14 58 28 B:13 C:12 D:16 E:9 F:5 Każda ścieżka odpowiada jednemu słowu kodowemu. W lewo = 0 w prawo = 1 A:45 F ma kod 101 Kod stałej długości Znak + częstość występowania 2019-01-17 G. Mirkowska, ASD_11 Algorytmy na grafach
G. Mirkowska, ASD_11 Algorytmy na grafach Drzewo kodowe(2) Optymalny kod zawsze jest reprezentowany przez lokalnie pełne drzewo binarne. 100 A:45 30 25 14 C:12 B:13 D:16 F:5 E:9 55 A 0 B 101 C 100 D 111 E 1101 F 1100 Ciąg: 0100110110101100 Odczytujemy jako:ACEBAF Kod zmiennej długości 2019-01-17 G. Mirkowska, ASD_11 Algorytmy na grafach
Konstrukcja kodu Huffmana liść 1.Utworzyć kolejkę priorytetową PQ zawierającą wszystkie znaki alfabetu wraz z ich częstością występowania Znak f 2. For i :=1 to n-1 do a := min(PQ); PQ := delmin(PQ); b := min(PQ); PQ := delmin(PQ); z := New node (a,b); z.f := a.f + b.f; PQ := insert(PQ, z); od; return min (PQ); f lewy prawy Wierzchołek wewnętrzny Koszt O(n lgn) Algorytm zachłanny 2019-01-17 G. Mirkowska, ASD_11 Algorytmy na grafach
G. Mirkowska, ASD_11 Algorytmy na grafach Przykład 100 1 A:45 55 Konstrukcja kodu Huffmana 25 30 A:45 C:12 B:13 D:16 F: 5 E: 9 14 25 30 A:45 C:12 B:13 D:16 F: 5 E: 9 14 14 A:45 C:12 B:13 D:16 F: 5 E: 9 14 25 A:45 C:12 B:13 D:16 F: 5 E: 9 2019-01-17 G. Mirkowska, ASD_11 Algorytmy na grafach
Problem Problem ścieżek Dany jest graf G = <V, E> i jego funkcja kosztu c : E R +. Problem Znaleźć najkrótsze drogi od ustalonego wierzchołka (źródła) do wszystkich innych wierzchołków. 1 4 6 7 5 3 2 10 8 15 Suma kosztów krawędzi leżących na tej drodze jest najmniejsza 2019-01-17 G. Mirkowska, ASD_11 Algorytmy na grafach
G. Mirkowska, ASD_11 Algorytmy na grafach Metoda Dijkstry W kolejnych etapach algorytmu zbiór wierzchołków osiągalnych ze źródła jest powiększany o wierzchołki sąsiadujące z ostatnio dołączonymi. Zawsze staramy się by dołączać te wierzchołki, których osiągnięcie wymaga najmniejszego kosztu (które znajdują się „najbliżej” źródła). 2019-01-17 G. Mirkowska, ASD_11 Algorytmy na grafach
G. Mirkowska, ASD_11 Algorytmy na grafach Struktura danych Tablica d (1: n) d[i] = długość najkrótszej ścieżki miedzy źródłem s, a wierzchołkiem i. Na początku d[i] = c(s,i), jeśli (s,i) E, d[i] = + w p.p. Tablica P(1:n) P[i] = ojciec wierzchołka i na najkrótszej ścieżce od s do i. Zbiór wierzchołków S1, dla których znamy najkrótsze ścieżki ze źródła s. Na początku S1 = {s}. Zbiór S2 wierzchołków osiągalnych z S1, S2 = {y : istnieje x S1, że (x,y) E}. Na początku S3 = V-{s}. Zbiór wierzchołków S3, których jeszcze nie sklasyfikowano. 2019-01-17 G. Mirkowska, ASD_11 Algorytmy na grafach
G. Mirkowska, ASD_11 Algorytmy na grafach Przykład A B C D E F G H I 2 5 4 1 6 9 3 A S2 S1 A B G F S1 A F G B C A B C D E F G H I J d P 2 6 9 5 A B A A 2019-01-17 G. Mirkowska, ASD_11 Algorytmy na grafach
G. Mirkowska, ASD_11 Algorytmy na grafach c.d. przykładu A B C D E F G H I 2 5 4 1 6 9 3 S2 B C S1 A G H I S1 A F G B C I H S2 F D A B C D E F G H I J d P 2 6 8 9 5 10 7 A B C A A G G 2019-01-17 G. Mirkowska, ASD_11 Algorytmy na grafach
G. Mirkowska, ASD_11 Algorytmy na grafach Cd. przykładu S2 A B C D E F G H I 2 5 4 1 6 9 3 C B D S1 A G I H F A B C D E F G H I J d P 2 6 8 9 5 10 7 Itd............. A B C A A G G 2019-01-17 G. Mirkowska, ASD_11 Algorytmy na grafach
G. Mirkowska, ASD_11 Algorytmy na grafach { x := s; while niepusty (S3) do Dla wszystkich wierzchołków y incydentnych z x do case y S2 if d(x) +c(x,y) <d(y) then P(y) := x; d(y) := d(x) +c(x,y) fi ; case y S3 S3 := S3 –{y}; S2 := S2 +{y}; P(y) := x; d(y) := d(x) +c(x,y); od; Wybierz taki element w zb. S2, że d(z) jest minimalne x := z; od } Koszt Algorytmu Dijkstry O(|V|2) 2019-01-17 G. Mirkowska, ASD_11 Algorytmy na grafach