Temat: Problem minimalnego drzewa Steinera. Definicja problemu. Zastosowania. Algorytm dokładny Hakimi. Algorytmy aproksymacyjne. 1. Definicja problemu Wejcie: Graf spójny niezorientowany G = <V, E, w> z funkcj kosztu w: E R +. X zbiór wierzchołków grafu G, które nazwiemy terminalami. X = t. Elementy zbioru V\X to tzw. wierzchołki Steinera. Wyjcie: Drzewo rozpinajce wszystkie wierzchołki ze zbioru terminali o minimalnym koszcie. Do drzewa moe nalee dowolny podzbiór wierzchołków Steinera. Przykład Przykład grafu wejciowego w problemie Steinera. Kolorem czerwonym oznaczone s wierzchołki bdce terminalami, za kolorem czarnym wierzchołki Steinera. 1
Koszt drzewa Steinera wynosi 11. Kolorem niebieskim oznaczono krawdzie nalece do drzewa Steinera 2. Zastosowania Problem drzewa Steinera ma zastosowania w wielu dziedzinach. Przykładowe zastosowania: problem multicast routingu - terminale w drzewie Steinera s jednoznaczne z komputerami odbiorców, pozostałe wzły sieci to routery. Naley wyznaczy taki zbiór routerów, aby połczy wszystkich odbiorców i zmaksymalizowa szybko połczenia (albo zminimalizowa opónienia). 2
projektowanie układów elektronicznych VLSI ( ang. Very Large Scale Integration (VLSI) wicej ni 100 000 elementów, typowo miliony elementów), w których naley wyznaczy moliwie najkrótsze cieki łczce poszczególne piny. 3. Algorytm dokładny (Hakimi 1971) Problem drzewa Steinera zarówno w sformułowaniu klasycznym jak i we wszystkich odmianach naley do problemów NPtrudnych. Algorytm dokładny rozwizujcy ten problem ma zatem koszt ponadwielomianowy nie moe by zastosowany do grafów, które maj wicej ni 20 30 wierzchołków, z powodu nierozsdnego czasu wykonania. W algorytmie Hakimi, który jest algorytmem dokładnym, wyznaczamy wszystkie podzbiory zbioru wierzchołków nie bdcych terminalami. Liczno tych podzbiorów waha si od 0 3
do liczby wierzchołków Steinera. Dla kadego z podzbiorów wyznaczamy drzewo spinajce wierzchołki terminalne z tym podzbiorem. Jeli rozmiar tego drzewa jest mniejszy od rozmiaru drzewa znalezionego w kroku poprzednim, zastpujemy stare drzewo, nowym. Drzewo o minimalnym koszcie jest minimalnym drzewem Steinera. algorytmu Hakimi: min=; for (A V/X) { T = minimalne drzewo spinajce podzbiór A ze wszystkimi terminalami ; if ( T istnieje ) { if (w(t)<min) // w(t) koszt drzewa T { T min = T; min = w(t); } } } return T min ; 4
Przykład Wierzchołki {a, c, g, i} to terminale, za wzły {b, d, e, f, h} to wierzchołki Steinera. W kadym kroku algorytmu Hakimi sprawdzany jest jeden podzbiór A wierzchołków Steinera. Najliczniejszy z tych podzbiorów jest picioelementowy: {b, d, e, f, h}. Kolejne podzbiory maj rozmiar mniejszy od 5. Wród wszystkich podzbiorów jest równie podzbiór pusty. Dla kadego podzbioru A wyznaczane jest minimalne drzewo T spinajce ten podzbiór oraz wszystkie terminale wystpujce w grafie. Dla podzbioru A = {b, d, e, f, h} minimalne drzewo spinajce T wyglda nastpujco: 5
Dla podzbioru A = {b, d, e} nie istnieje minimalne drzewo rozpinajce łczce wierzchołki ze zbioru A ze wszystkimi terminalami. W tej sytuacji podzbiór A jest odrzucany. Wyznaczajc wszystkie podzbiory dla rozpatrywanego przykładu, okazuje si i podzbiór A = {b, e, h} wygeneruje minimalne drzewo Steinera. Poniej wypisane zostały wszystkie podzbiory A oraz wagi minimalnych drzew spinajcych wierzchołki tych podzbiorów: {b, d, e, f, h} = 14 zapis ten oznacza, e koszt minimalnego drzewa spinajce wierzchołki {b, d, e, f, h} z terminalami wynosi 14. 6
{b, d, e} nie istnieje {b, d, f} = 14 {b, d, h} = 12 {b, e, f} - nie istnieje {b, e, h} = 10 {b, f, h} = 12 {d,e,f} = 14 {d, e, h} - nie istnieje {d, f, h} = 13 {e, f, h} - nie istnieje {b, d} - nie istnieje {b, e} - nie istnieje {b, f} - nie istnieje {b, h} - nie istnieje {d, e} - nie istnieje {d, f} - nie istnieje {d, h} - nie istnieje {e, f} - nie istnieje {e,h} - nie istnieje {f, h} - nie istnieje {b} - nie istnieje {d} - nie istnieje {e} - nie istnieje {f} - nie istnieje {h} - nie istnieje {} - nie istnieje Koszt algorytmu dokładnego Generowane s wszystkie podzbiory zbioru wierzchołków Steinera. Liczba elementów w tych podzbiorach wynosi 0, 1,, n t, zatem liczba tych podzbiorów jest równa 2 n-t. Dla kadego podzbioru wyznaczane jest minimalne drzewo rozpinajce ten podzbiór oraz wszystkie terminale. Do generowania minimalnego drzewa rozpinajcego mona wykorzysta algorytm Prima. Koszt tego algorytmu jest rzdu Ο ( mlog n) (pod warunkiem, e kolejka priorytetowa zostanie zrealizowana na kopcu Fibonacciego). Na koszt całego algorytmu ma to niewielki wpływ. Koszt globalny algorytmu jest równy O(2 n-t mlogn). 7
4. Algorytm zachłanny Nierozsdny (ponadwielomianowy) koszt rozwiza dokładnych dla problemu drzewa Steinera powoduje, e nie mog by one wykorzystane w praktyce. Opracowano wiele rozwiza aproksymacyjnych dla tego problemu. Najprostsza heurystyka opiera si na technice zachłannej. Algorytm rozpoczyna si od wylosowania terminala. W kolejnych krokach wybierany jest terminal najbliszy poprzedniemu, to jest z najmniejsz wag krawdzi. Nastpnie łczymy nowo wybrany terminal z poprzednim krawdziami najkrótszej cieki midzy nimi. Algorytm koczy si w momencie wykorzystania wszystkich terminali. algorytm zachłanny; x = losowy terminal x X ; T = ({x}, ); for (i = 1; i <=t-1; i++) { s = x; D = algorytm_dijkstry(s); // D tabela minimalnych // odległoci z s v = terminal najbliszy x ; T = T path(s, v); // path(s, v) krawdzie z najkrótszej // cieki midzy s a v } return T; 8
Przykład Wierzchołki {a, c, g, i} s terminalami, za wierzchołki { b, d, e, f, h} to wierzchołki Steinera. W pierwszym kroku algorytmu wybierany jest drog losow wierzchołek v bdcy terminalem. Niech v = c. Ustalamy najkrótsze cieki z v do pozostałych terminali. Mona tutaj uy algorytmu Dijkstry, który zwraca tablic odległoci D z danego wierzchołka terminalnego do wszystkich pozostałych wierzchołków. 9
Tablica D wyglda nastpujco: D = [ 4, 2, 0, 5, 3, 2, 7, 5, 5] a b c d e f g h i Z tabeli D wybieramy terminalny wierzchołek połoony najbliej wierzchołka c, który nie został jeszcze włczony do drzewa. Najbliszym terminalem w stosunku do c jest wierzchołek a, a odległo do niego wynosi 4. Rozmiar minimalnego drzewa Steinera wynosi teraz 4. Drzewo to zawiera krawdzie z najkrótszej cieki z c do a. Tablica D ulega zmianie, gdy teraz wierzchołek a jest wierzchołkiem startowym w algorytmie Dijkstry. Nowa zawarto tablicy D jest nastpujca: D = [0, 2, 4, 3, 3, 5, 5, 5, 7] a b c d e f g h i W tej sytuacji najbliszym a i niewybranym dotd terminalem jest g. Sytuacj t obrazuje rysunek poniej: 10
Po dodaniu kolejnego terminala do drzewa Steinera zwiksza si jego rozmiar do 9. Po raz kolejny tablica D generowana przez algorytm Dijkstry ulega zmianie. Tym razem wierzchołkiem pocztkowym jest wierzchołek g. Tablica D przedstawia si teraz nastpujco: D = [5, 5, 7, 2, 3, 5, 0, 1, 3] a b c d e f g h i Z tablicy tej wybieramy terminal najbliszy g. Jest nim terminal i. Sprawdzamy, czy nie naley do drzewa Steinera. Jeli nie, to dołczamy go do drzewa. Koczymy algorytm w momencie, gdy wszystkie terminale s odwiedzone. Ostatecznie minimalne drzewo Steinera ma rozmiar równy 12 i przedstawia si nastpujco: 11
Koszt algorytmu zachłannego dla problemu drzewa Steinera Koszt algorytmu zachłannego w porównaniu z algorytmem dokładnym jest niewielki. Na czas realizacji tego algorytmu ma głównie wpływ wykorzystanie algorytmu Dijkstry. Algorytm ten jest uruchamiany dla kadego terminala, czyli t razy. Koszt algorytmu Dijkstry jest rzdu O(nlogn), a wic koszt globalny algorytmu wynosi O(tnlogn). Algorytmy zachłanny nie zawsze zwraca wynik optymalny. Jako aproksymacji tego algorytmu zostanie omówiona póniej. 5. Algorytm KMB (Kou, Markovsky, Berman) Algorytm KMB, w celu obliczenie minimalnego drzewa Steinera, przebudowuje graf wejciowy, usuwajc z niego wszystkie wierzchołki Steinera. W powstałym grafie pełnym krawdzie midzy terminalami maj wag równ długoci najkrótszych cieek w grafie pocztkowym. 12
algorytm KMB; G = <X, E >; // E ={(a, b): a, b X i // w(a, b) = w( minimalna cieka z a do b w G )} T = minimalne drzewo spinajce G ; T = podgraf G taki, e dla kadej krawdzi w T odtwarzamy najkrótsz ciek w G ; return T; Przykład Wierzchołki {a, c, g, i} s terminalami, za wierzchołki {b, d, e, f, h} to wierzchołki Steinera. Pierwszym krokiem algorytmu KMB jest przebudowanie grafu G na graf G. Zastpujemy wszystkie krawdzie midzy terminalami prowadzce przez wierzchołki Steinera jedn krawdzi o koszcie najkrótszej cieki pomidzy tym terminalem w grafie G. 13
W momencie utworzenia nowego grafu G wywoływany jest algorytm wyznaczajcy minimalne drzewo rozpinajce graf G. Jeeli zastosowany zostanie algorytm Prima, to minimalne drzewo rozpinajce T grafu G bdzie nastpujce: W ostatnim kroku algorytmu naley odtworzy cieki z grafu G dla kadej krawdzi drzewa T. Uzyskane w ten sposób drzewo T jest wynikiem algorytmu. 14
Koszt drzewa T wynosi 12. Koszt algorytmu KMB dla problemu drzewa Steinera Konstrukcja grafu G ma koszt O(t 2 nlogn), poniewa dla kadej pary terminali trzeba ustali najkrótsz ciek midzy tymi terminalami. Wyznaczenie drzewa rozpinajcego T dla grafu G ma koszt O(t 2 logn) (gdy zastosujemy algorytm Prima z kolejk zaimplementowan na kopcu Fibonacciego). Odtworzenie najkrótszych cieek z grafu G dla kadej krawdzi drzewa T ma koszt O(t 2 nlogn) poniewa dla kadej krawdzi z T trzeba wywoła algorytm Dijkstry. Zatem koszt łczny algorytmu KMB wynosi O(t 2 nlogn). 6. Jako aproksymacji algorytmów przyblionych Jako aproksymacji mona okrela stosujc pojcie ograniczenia wzgldnego. W poniszych definicjach bd stosowane nastpujce oznaczenia: C* - koszt rozwizania optymalnego, C koszt rozwizania przyblionego. Def. Powiemy, e algorytm aproksymacyjny ma ograniczenie wzgldne ε(n), gdy dla dowolnych danych wejciowych spełniony jest warunek: C max C *, C C * ε ( n) Algorytm zachłanny i KMB ma stałe ograniczenie wzgldne równe odpowiednio 2 i 1.7. 15