algorytmy i struktury danych. - algorytmy zach annewozna.org/students/2016-2017/asd/asd11.pdf ·...
Post on 25-Feb-2020
30 Views
Preview:
TRANSCRIPT
Algorytmy i Struktury Danych.Algorytmy Zachłanne
dr hab. Bozena Wozna-Szczesniakbwozna@gmail.com
Jan Długosz University, Poland
Wykład 11
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 11 1 / 31
Plan wykładu
Algorytmy zachłanne - wprowadzenieProblem wyboru zajec.Problem przydziału zajec do jak najmniejszej liczby sal.Problem wydawania resztyAlgorytm KruskalaAlgorytm Prima (algorytm najblizszego sasiada).
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 11 2 / 31
Algorytmy zachłanne
Algorytmy zachłanne stosowane do rozwiazywania problemówoptymalizacyjnych, w których osiagniecie optymalnegorozwiazania wymaga podejmowania wielu decyzji.Algorytm zachłanny przy podejmowaniu jednej z wielu mozliwychdecyzji zawsze wykonuje działanie, które wydaje sie w danejchwili najkorzystniejsze.Algorytm zachłanny wybiera lokalnie optymalna mozliwosc wnadziei, ze doprowadzi ona do globalnie optymalnego rozwiazania(działa zachłannie)Algorytmy zachłanne nie zawsze prowadza do optymalnychrozwiazan.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 11 3 / 31
Problem wyboru zajec
Problem wyboru zajec, to problem przydzielenia dostepu dozasobu wykorzystywanego podczas wykonywania pewnych zajec.Załozenia:
Niech bedzie dany zbiór proponowanych zajec S = {1, . . . ,n}, doktórych ma byc przydzielona sala wykładowa (zasoby), w którejmoze sie odbywac w danej chwili tylko jedno z tych zajec.Kazde zajecie ma swój czas rozpoczecia si oraz czas zakonczeniafi takie, ze si ≤ fi . Jezeli zajecie o numerze i zostanie wytypowane,to zajmuje zasób [si , fi). Zajecia o numerach i oraz j sa zgodne,jesli [si , fi) ∩ [sj , fj) = 0
Problem: Wyznaczyc najwiekszy podzbiór parami zgodnychzajec.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 11 4 / 31
Jak działa algorytm wyczerpujacy (naiwny) ?
Generujemy wszystkie podzbiory zbioru zajecWybieramy te podzbiory, które sa parami zgodneWybieramy ten podzbiór, który ma najwiecej elementówObserwacja: Algorytm wyczerpujacy ma złozonosc O(2n)
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 11 5 / 31
Strategia zachłanna: przykład
Dane sa zajecia:i 1 2 3 4 5 6 7 8 9 10 11si 12 8 1 3 8 2 0 5 5 3 6fi 14 12 4 5 11 13 6 7 9 8 10
Porzadkujemy zajecia ze wzgledu na czas zakonczeniaf1 ≤ f2 ≤ . . . ≤ fnWybieramy na kazdym kroku to zajecie, które ma najwczesniejszyczas zakonczenia wsród zajec, które moga byc dołaczone dozbioru - wybór ten maksymalizuje ilosc nie zajetego czasu po jegodokonaniu.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 11 6 / 31
Strategia zachłanna: przykład
i 1 2 3 4 5 6 7 8 9 10 11si 12 8 1 3 8 2 0 5 5 3 6fi 14 12 4 5 11 13 6 7 9 8 10
i s_i f_i 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
3 1 4 1
4 3 5 21
7 0 6 31
8 5 7 41
10 3 8 51 4
9 5 9 61 4
11 6 10 71 4
5 8 11 81 4
2 8 12 91 4 8
6 2 13 101 4 8
1 12 14 111 4 8
rozwiązanie 3 4 8 11
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 11 7 / 31
Algorytm: GREEDY-ACTIVITY-SELECTOR
Dane wejsciowe stanowia tablice s (czasów rozpoczecia) oraz f(czasów zakonczenia).Zakładamy, ze zajecia sa posortowane ze wzgledu na czaszakonczenia.
GREEDY-ACTIVITY-SELECTOR (s, f)
1: n := length[s]2: A := {1}3: j := 14: for i := 2 to n do5: if si ≥ fj then6: A := A ∪ {i}7: j := i8: end if9: end for
10: return A
Zbiór A zawiera wybrane zajecia, a zmienna j zawieranumer ostatnio dodanego do A zajecia.
Zajecia sa rozpatrywane w porzadku rosnacego czasuzakonczenia, zatem fj jest zawsze najwiekszym czasemzakonczenia zajecia nalezacego do A.
W wierszach 2-3 wybieramy zajecie 1, zbiór {1} stajesie wartoscia zmiennej A, a zmiennej j przypisujemynumer tego zajecia.
W wierszach 4-9 rozpatrywane sa wszystkie zajecia;zajecie zostaje dołaczone, jezeli jest zgodne zewszystkimi dołaczonymi dotychczas zajeciami.
Aby stwierdzic, czy zajecie i jest zgodne z kazdymzajeciem ze zbioru A, wystarczy sprawdzic czy jegoczas rozpoczecia si nie jest wczesniejszy niz czaszakonczenia fj zajecia ostatnio dodanego do A.
Jesli zajecie i jest zgodne, to w wierszach 6-7 zostajeono dodane do zbioru A oraz jest aktualizowanawartosc j .
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 11 8 / 31
Algorytm: GREEDY-ACTIVITY-SELECTOR - Uwagi
Zajecie wybrane przez GREEDY-ACTIVITY-SELECTOR mazawsze najwczesniejszy czas zakonczenia wsród zajec, któremoga byc dołaczone bez zakłócenia zgodnosci zbioru A.Wybór jest zachłanny w tym sensie, ze pozostawia mozliwienajwiecej swobody przy wyborze pozostałych zajec.Twierdzenie: Algorytm zachłanny generuje rozwiazanie problemuwyboru zajec o najwiekszym rozmiarze.Złozonosc O(n).
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 11 9 / 31
Charakterystyczne cechy problemów poddajacych siestrategii zachłannej
optymalna podstruktura - optymalne rozwiazanie jest funkcjaoptymalnych rozwiazan podproblemów. Na przykład dla problemuwyboru zajec własnosc optymalnej podstruktury polega na tym,ze: jezeli optymalne rozwiazanie A tego problemu rozpoczyna sieod zajec o numerze 1, to A′ = A− {1} jest optymalnymrozwiazaniem problemu optymalnego wyboru zajec dla zbioruS′ = {i ∈ S : si ≥ f1}.własnosc wyboru zachłannego - za pomoca lokalnieoptymalnych (zachłannych) wyborów mozna uzyskac globalnieoptymalne rozwiazanie. W algorytmie zachłannym wybory sapodejmowane jako najlepsze (z punktu widzenia zadania) w danejchwili. Wybory podejmowane w algorytmie zachłannym nie sazalezne od wyborów przeszłych. Mozna formalnie udowodnic(stosujac metode indukcji), ze dany problem ma własnosc wyboruzachłannego.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 11 10 / 31
Problem przydziału zajec do minimalnej liczby sal
Problem: Dany jest zbiór zajec, które maja sie odbyc w pewnejliczbie sal wykładowych. Nalezy wyznaczyc taki przydział zajec dosal, aby liczba uzytych sal była najmniejsza.Metoda zachłanna rozwiazujaca ten problem:
Niech bedzie dany zbiór zajec S = 1, . . . ,n, do których ma bycprzydzielona sala wykładowa (zasoby), w której moze sie odbywacw danej chwili tylko jedno z tych zajec.Kazde zajecie ma swój czas rozpoczecia si oraz czas zakonczeniafi takie, ze si ≤ fi . Jezeli zajecie o numerze i zostanie wytypowane,to zajmuje zasób [si , fi). Zajecia o numerach i oraz j sa zgodne jesli[si , fi) ∩ [sj , fj) = 0.Niech zajecia w S beda uporzadkowane niemalejaco ze wzgleduna ich czas rozpoczecia; Jezeli znajda sie dwa zajecia i oraz jtakie, ze si = sj , to wówczas pierwsze bedzie to zajecie, które madłuzszy czas trwania.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 11 11 / 31
Algorytm: GREEDY-ROOM-SELECTOR
Dane wejsciowe stanowia tablice s (czasów rozpoczecia) oraz f(czasów zakonczenia).Zakładamy, ze zajecia sa posortowane ze wzgledu na czasrozpoczecia.
GREEDY-ROOM-SELECTOR (s, f)
1: k := 12: A := {1,2, . . . , length[s]}3: while A 6= ∅ do4: p[k ] := GREEDY−SELECTOR(s, f )5: A := A− p[k ]6: if A 6= ∅ then7: k := k + 18: end if9: end while
10: return k
Zadaniem procedury pomocniczejGREEDY-SELECTOR jest wybranie zezboru S podzbioru zawierajacegowszystkie parami zgodne zajecia, wsródktórych jest zajecie nr 1.
Działanie tej procedury jest analogiczne jakdziałanie proceduryGREEDY-ACTIVITY-SELECTOR. Róznicapolega jedynie na tym, zeGREEDY-SELECTOR pobiera zajeciauporzadkowane zgodnie z czasem ichrozpoczecia, aGREEDY-ACTIVITY-SELECTOR pobierazajecia uporzadkowane zgodnie z czasemich zakonczenia.
Złozonosc O(n2)
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 11 12 / 31
Algorytm: GREEDY-ROOM-SELECTOR - Uwagi
Liczba sal wyznaczona GREEDY-ROOM-SELECTOR jest zawszenajmniejszaWybór jest zachłanny w tym sensie, ze pozostawia w danej Saliminimalna ilosc niewykorzystanego czasuTwierdzenie: Algorytm GREEDY-ROOM-SELECTOR generujeoptymalne rozwiazanie problemu przydziału zajec do jaknajmniejszej liczby sal.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 11 13 / 31
Problem wydawania reszty za pomoca jaknajmniejszej liczby monet
Problem: Mamy reszte R i N monet o nominałach o okreslonychwartosciach całkowitych. Monet o okreslonym nominale jestnieograniczona liczba. Nalezy podac jak najmniejsza ilosc monetpotrzebna do wydania reszty.Przykład: Wydac 98 PLN, dysponujac nominałami:
50, 20, 10, 5, 2, 1.Rozwiazanie: Porzadkujemy nominały malejaco ze wzgledu naich wartosci. Wydajemy nastepujaco:
50 - pozostało 4820 - pozostało 2820 - pozostało 85 - pozostało 32 - pozostało 11 - pozostało 0
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 11 14 / 31
Algorytm: GREEDY-GIVE-CHANGE
Załozenie: c jest uporzadkowana malejaco tablica nominałów,sum jest reszta do wydania, k jest liczba nominałów róznegorodzaju.
GREEDY-GIVE-CHANGE (sum,c,k)
1: for i := 0 to k do2: if (sum div c[i]) 6= 0 then3: change[i] := sum div c[i]4: sum := sum mod c[i]5: else6: change[i] := 07: end if8: end for9: return change
Do tablicy change wpisujemy najwiekszamozliwa liczbe nominałuck > ck−1 > . . . > c0.
Jezeli jakiegos nominału nie mozna uzycdo wydania okreslonej reszty, tzn. nie jestspełniony warunek (sumdivc[i])! = 0, todo tablicy change wpisywana jest wartosczero - wiersz 6 algorytmu.
Złozonosc O(n)
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 11 15 / 31
Problem wydawania reszt - uwagi
Istnieja zbiory nominałów, dla których podany algorytm nie dajeoptymalnego rozwiazania.Przykład 1: Wydac 10PLN za pomoca nominałów 1, 5 i 6.
Rozwiazanie algorytmu zachłannego: 6 + 1 + 1 + 1 + 1, czyli 5monet.Rozwiazanie optymalne: 5 + 5
Przykład 2: Wydac 66 PLN za pomoca nominałów 50, 20 i 1.Rozwiazanie algorytmu zachłannego: 50 + 16 *1, czyli 17nominałów.Rozwiazanie optymalne: 3* 20 + 6* 1, czyli 9 nominałów.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 11 16 / 31
Drzewo rozpinajace grafu
DefinicjaDrzewem rozpinajacym grafu G nazywamy spójny i acyklicznypodgraf grafu G zawierajacy wszystkie jego wierzchołki.
TwierdzenieKazdy graf spójny zawiera drzewo rozpinajace.
TwierdzenieW grafie spójnym G = (V ,E) krawedz e ∈ E jest krawedzia cieciawtedy i tylko wtedy, gdy e nalezy do kazdego drzewa rozpinajacegografu G.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 11 17 / 31
Drzewo rozpinajace grafu
DefinicjaDrzewem rozpinajacym grafu G nazywamy spójny i acyklicznypodgraf grafu G zawierajacy wszystkie jego wierzchołki.
TwierdzenieKazdy graf spójny zawiera drzewo rozpinajace.
TwierdzenieW grafie spójnym G = (V ,E) krawedz e ∈ E jest krawedzia cieciawtedy i tylko wtedy, gdy e nalezy do kazdego drzewa rozpinajacegografu G.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 11 17 / 31
Drzewo rozpinajace grafu
DefinicjaDrzewem rozpinajacym grafu G nazywamy spójny i acyklicznypodgraf grafu G zawierajacy wszystkie jego wierzchołki.
TwierdzenieKazdy graf spójny zawiera drzewo rozpinajace.
TwierdzenieW grafie spójnym G = (V ,E) krawedz e ∈ E jest krawedzia cieciawtedy i tylko wtedy, gdy e nalezy do kazdego drzewa rozpinajacegografu G.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 11 17 / 31
Drzewa rozpinajace o minimalnej wadze
Jezeli mamy do czynienia z grafem z wagami, to najczesciejinteresuje nas znalezienie drzewa rozpinajacego o minimalnejwadze, tzn., drzewa z najmniejsza suma wag jego krawedzi.Aby znalezc drzewo o zadanych własnosciach mozna zastosowacdwa algorytmy:
Kruskala (algorytm zachłanny)Prima (algorytm najblizszego sasiada).
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 11 18 / 31
Algorytmy Kruskala
Algorytm jest oparty o metode zachłanna i polega nałaczeniu wielu poddrzew w jedno za pomoca krawedzi onajmniejszej wadze.
Wybierz krawedz (która nie jest petla) e1 tak, by waga tej krawedzibyła najmniejsza.Jezeli krawedzie e1, e2, . . ., ek zostały juz wybrane, to zpozostałych E \ {e1,e2, . . . ,ek} wybierz krawedz ek+1 w takisposób aby:
graf, który składa sie tylko z krawedzi e1, e2, . . ., ek , ek+1 byłacykliczny, orazwaga krawedzi ek+1 była najmniejsza.
Jesli nie mozna wykonac kroku 2, to STOP.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 11 19 / 31
Algorytm Kruskala - Złozonosc obliczeniowa
Algorytm mozna podzielic na dwa etapy:w pierwszym etapie sortujemy krawedzie według wag w czasieO(m · log(m)).w drugim etapie budujemy rozpiete drzewo poprzez wybórnajkrótszych krawedzi ze zbioru krawedzi E(G); ten etap moznawykonac w czasie O(m · log(n)).
Sumaryczny czas pracy algorytmu Kruskala wynosi: O(m · log(n))
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 11 20 / 31
Algorytm Kruskala - Przykład
a4
2
b2
2
c
8
d3
e
1
7f
6
Po posortowaniu krawedzi wg.wag otrzymujemy:ae=1 , af=2 , bc=2 , be=2 ,de=3 , ab=4 , fd=6 , ef=7 ,cd=8
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 11 21 / 31
Algorytm Kruskala - Przykład
Krok 1.
a4
2
b2
2
c
8
d3
e
1
7f
6
Krok 2.
a4
2
b2
2
c
8
d3
e
1
7f
6
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 11 22 / 31
Algorytm Kruskala - Przykład
Krok 3.
a4
2
b2
2
c
8
d3
e
1
7f
6
Krok 4 - scalenie.
a4
2
b2
2
c
8
d3
e
1
7f
6
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 11 23 / 31
Algorytm Kruskala - Przykład
Krok 5.
a4
2
b2
2
c
8
d3
e
1
7f
6
Minimalne drzewo.
a
2
b2
2
c
d3
e
1
f
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 11 24 / 31
Algorytm Prima
Algorytm Prima - algorytm zachłanny wyznaczajacy tzw.minimalne drzewo rozpinajace.Algorytm został wynaleziony w 1930 przez czeskiego matematykaVojtecha Jarníka, a nastepnie w 1957 odkryty na nowo przezinformatyka Roberta C. Prima oraz niezaleznie w 1959 przezEdsgera Dijkstre. Z tego powodu algorytm nazywany jestrówniez algorytmem Dijkstry-Prima, algorytmem Jarníka, alboalgorytmem Prima-Jarníka.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 11 25 / 31
Algorytm Prima
Budowe minimalnego drzewa rozpinajacego zaczynamy oddowolnego wierzchołka, np. od pierwszego. Dodajemywierzchołek do drzewa, a wszystkie krawedzie incydentneumieszczamy na posortowanej wg. wag liscie.Nastepnie zdejmujemy z listy pierwszy element (o najmniejszejwadze) i jezeli wierzchołek, który łaczy nie nalezy do drzewa,dodajemy go do drzewa a na liscie znów umieszczamy wszystkiekrawedzie incydentne z wierzchołkiem, który dodalismy.Jednym zdaniem: zawsze dodajemy do drzewa krawedz onajmniejszej wadze, osiagalna (w przeciwienstwie do Kruskala) zjakiegos wierzchołka tego drzewa.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 11 26 / 31
Algorytm Prima - Przykład
a4
2
b2
2
c
8
d3
e
1
7f
6
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 11 27 / 31
Algorytm Prima - Przykład
Krok 1.
a4
2
b2
2
c
8
d3
e
1
7f
6
Wybieramy wierzchołek a.Tworzymy posortowana listeL=[a,e,1],[a,f,2],[a,b,4]. Wybieramykrawedz (a,e).
Krok 2.
a4
2
b2
2
c
8
d3
e
1
7f
6
Dodajemy nowe krawedzie:L=[a,f,2],[e,b,2],[e,d,3],[a,b,4],[e,f,7].Wybieramy krawedz (a,f).
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 11 28 / 31
Algorytm Prima - Przykład
Krok 3.
a4
2
b2
2
c
8
d3
e
1
7f
6
Krawedz [f,e,7] jest juz na liscie:L=[e,b,2],[e,d,3],[a,b,4],[f,d,6],[e,f,7].Wybieramy krawedz (e,b).
Krok 4
a4
2
b2
2
c
8
d3
e
1
7f
6
Dodajemy krawedz [b,c,2]:L=[b,c,2],[e,d,3],[a,b,4],[f,d,6],[e,f,7]Wybieramy krawedz (b,c).
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 11 29 / 31
Algorytm Prima - Przykład
Krok 5.
a4
2
b2
2
c
8
d3
e
1
7f
6
Dodajemy krawedz [c,d,8]:L=[e,d,3],[a,b,4],[f,d,6],[e,f,7],[c,d,8]Wybieramy krawedz (e,d).
Minimalne Drzewo
a
2
b2
2
c
d3
e
1
f
Drzewo utworzone.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 11 30 / 31
Algorytm Prima a Algorytm Kruskala - Przykład
Minimalne Drzewo wg. AlgorytmuKruskala.
a
2
b2
2
c
d3
e
1
f
Minimalne Drzewo wg. AlgorytmuPrima
a
2
b2
2
c
d3
e
1
f
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 11 31 / 31
top related