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).