Lista nr 3
Transkrypt
Lista nr 3
Algorytmy optymalizacji dyskretnej – Paweł Zieliński 1 Ćwiczenia Lista nr 31 1. Rozważmy sieć, w której wszystkie koszty łuków są takie same. Zaproponuj algorytm wyznaczający najkrótszą ścieżkę. 2. Skonstruuj przykład sieci w problemie najkrótszej ścieżki, gdzie pewne łuki mają koszty ujemne (nie ma cykli o ujemnym koszcie) i algorytm Dijkstry działa poprawnie. Skonstruuj przykład sieci, dla której algorytm Dijkstry nie działa poprawnie. 3. Rozważmy sieć G = (N, A) bez cykli o ujemnej długości Dla każdego j ∈ N , niech ds (j) oznacza długość najkrótszej ścieżki od wierzchołka s do wierzchołka j i niech dt (j) oznacza długość najkrótszej ścieżki od wierzchołka j do wierzchołka t . (a) Pokaż, że łuk (i, j) należy do najkrótszej ścieżki od wierzchołka s do wierzchołka t wtedy i tylko wtedy, gdy ds (t) = ds (i) + cij + dt (j). (b) Pokaż, że ds (t) = min{ds (i) + cij + dt (j) | (i, j) ∈ A}. 4. Które z poniższych stwierdzeń jest prawdziwe lub fałszywe? Uzasadnij swoją odpowiedź przez podanie dowodu lub skonstruowanie kontrprzykładu. (a) Jeśli wszystkie łuki w sieci mają różne koszty, to istnieje tylko jedno drzewo najkrótszych ścieżek. (b) Rozważmy skierowaną sieć z dodatnimi długościami łuków, Jeśli w tej sieci pominiemy skierowanie łuków (łuki staną się krawędziami), to najkrótsze odległości od ustalonego wierzchołka nie zmienią się. (c) Jeśli zwiększymy długość każdego łuku w sieci o k jednostek, to długości najkrótszych ścieżek wzrosną o wielokrotność k. (d) Jeśli zmniejszymy długość każdego łuku w sieci o k jednostek, to długości najkrótszych ścieżek zmaleją o wielokrotność k. (e) Spośród wszystkich najkrótszych ścieżek algorytm Dijkstry znajdzie tę, która ma najmniej łuków 5. Łuk w sieci nazywamy najbardziej istotnym jeśli jego usuniecie powoduje największy wzrost długości najkrótszej ścieżki między dwoma ustalonymi wierzchołkami, powiedzmy s i t. Rozważmy sieć z dodatnimi długościami łuków. Podaj algorytm wyznaczania łuku najbardziej istotnego. Jaki jest jego czas działania. 6. Przyśpieszenie algorytmu Dial. Niech cmin = min{cij | (i, j) ∈ A} i w = max{1, cmin }. Rozważmy implementację algorytmu Dial, w którym kubełki mają szerokość w (klasycznej implementacji szerokość kubełków wynosi jeden, w = 1, - szerokość przedziału). Pokaż, że zmodyfikowany algorytm nigdy nie zmniejszy etykiet wierzchołków, które znajdują się w pierwszym napotkanym niepustym kubełku (niepusty kubełek o najmniejszym 1 Zadania pochodzą z książki: R.K. Ahuja, T.L. Magnanti and J. B. Orlin, Network Flows: Theory, Algorithms, and Applications, Pearson Education, 2014. Algorytmy optymalizacji dyskretnej – Paweł Zieliński 2 indeksie). W konsekwencji każdy wierzchołek z tego kubełka można zaetykietować na stałe. Jaki jest czas zmodyfikowanego algorytmy Dial? 7. (Ahuja et al.) Przypuśćmy, że uporządkowaliśmy wszystkie skierowane ścieżki od wierzchołka s do wierzchołka t względem ich długości. k-najkrótszą ścieżką jest ścieżka na pozycji k-tej. Zaproponuj algorytm wyznaczania k-najkrótszej ścieżki dla k = 2. (Wsk: Druga najkrótsza ścieżka różni się od pierwszej najkrótszej ścieżki co najmniej jednym łukiem). 8. Niech uij 0 oznacza pojemność łuku w sieci. Zdefiniujmy pojemność skierowanej ścieżki P jako minimum pojemności łuków należących do tej ścieżki P . Problem maksymalnej pojemności ścieżki polega na wyznaczeniu ścieżki o maksymalnej pojemności z wierzchołka s do wszystkich innych wierzchołków w sieci. Zaproponuj algorytm rozwiązujący ten problem. 9. Niech G = (N1 ∪ N1 , A) będzie siecią dwudzielną. Załóżmy, że n1 = |N1 |, n2 = |N2 | i n1 ¬ n2 . Pokaż, że algorytm label-correcting (wersja wielomianowa) rozwiązuje problem najkrótszej ścieżki w tej sieci w czasie O(n1 m). 10. (Ahuja et al.) Rozważmy sieć G, w której każdemu łukowi (i, j) ∈ A przyporządkowujemy niezawodność 0 < µij ¬ 1 (prawdopodobieństwo, że łuk nie ulegnie uszkodzeniu). Niezawodność skierowanej ścieżki P definiujemy jako: µ(P ) = Π(i,j)∈P µij . Problem ścieżki o maksymalnej niezawodności polega na wyznaczeniu ścieżki o maksymalnej niezawpdności z wierzchołka s do wszystkich innych wierzchołków w sieci. (a) Załóżmy, że można stosować logarytmowanie. Sprowadź problem ścieżki o maksymalnej niezawodności do problemu najkrótszej ścieżki. (b) Załóżmy, że nie można stosować logarytmowania. Zaproponuj algorytm dla problemu ścieżki o maksymalnej niezawodności. (Wsk.: Zmodyfikuj algorytm Dijkstry).