Zaawansowane algorytmy i struktury danych/Ćwiczenia 9: Różnice pomiędzy wersjami
Nie podano opisu zmian |
m Zastępowanie tekstu – „.</math>” na „</math>” |
||
(Nie pokazano 1 pośredniej wersji utworzonej przez tego samego użytkownika) | |||
Linia 23: | Linia 23: | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed">'''Rozwiązanie''' | <div class="mw-collapsible mw-made=collapsible mw-collapsed">'''Rozwiązanie''' | ||
<div class="mw-collapsible-content" style="display:none"> | <div class="mw-collapsible-content" style="display:none"> | ||
Problem maksymalnego przepływu z wieloma źródłami i ujściami można w prosty sposób zredukować do standardowego problemu przepływu i rozwiązać przy pomocy dowolnego algorytmu dla tego problemu. W tym celu musimy dodać dodatkowe superźródło <math>s</math> i krawędzie <math>(s,s_i)</math> o przepustowości <math>c(s,s_i) = \infty | Problem maksymalnego przepływu z wieloma źródłami i ujściami można w prosty sposób zredukować do standardowego problemu przepływu i rozwiązać przy pomocy dowolnego algorytmu dla tego problemu. W tym celu musimy dodać dodatkowe superźródło <math>s</math> i krawędzie <math>(s,s_i)</math> o przepustowości <math>c(s,s_i) = \infty</math>, dla <math>i = 1,\ldots,m</math>. Dodajemy także superujście <math>t</math> wraz z krawędziami <math>(t_i,t)</math> o przepustowości <math>c(t_i,t)=\infty</math> dla <math>i=1,\ldots, n</math>. Widzimy teraz, że każdy przepływ w sieci oryginalnej odpowiada przepływowi w nowo utworzonej sieci. | ||
</div> | </div> | ||
</div> | </div> | ||
Linia 33: | Linia 33: | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed">'''Rozwiązanie''' | <div class="mw-collapsible mw-made=collapsible mw-collapsed">'''Rozwiązanie''' | ||
<div class="mw-collapsible-content" style="display:none"> | <div class="mw-collapsible-content" style="display:none"> | ||
Podobnie jak w rozwiązaniu zadania 2 dodajemy do sieci przepływowej nowe superźródło <math>s</math> wraz z krawędziami <math>(s,s_i)</math>, oraz nowe superujście wraz z krawędziami <math>(t_i,t)</math>. Jednak przepustowości nowo dodanych krawędzi zadajemy tak aby <math>c(s,s_i) = p_i </math> oraz <math>c(t_i,t) = q_i</math>. Zauważmy teraz, że jeżeli istnieje przepływ spełniający dodatkowe założenia w oryginalnej sieci, to będzie istniał przepływ o wartości <math>\sum_{i=1}^m p_i = \sum_{i=1}^{n}q_i</math> z superźródła do superujścia. Co więcej w przepływ z superźródła do superujścia nie może być większy niż <math>\sum_{i=1}^m p_i = \sum_{i=1}^{n}q_i</math>, ponieważ taka jest przepustowość rozcięcia <math>(s,V-s)</math>. | Podobnie jak w rozwiązaniu zadania 2 dodajemy do sieci przepływowej nowe superźródło <math>s</math> wraz z krawędziami <math>(s,s_i)</math>, oraz nowe superujście wraz z krawędziami <math>(t_i,t)</math>. Jednak przepustowości nowo dodanych krawędzi zadajemy tak aby <math>c(s,s_i) = p_i</math> oraz <math>c(t_i,t) = q_i</math>. Zauważmy teraz, że jeżeli istnieje przepływ spełniający dodatkowe założenia w oryginalnej sieci, to będzie istniał przepływ o wartości <math>\sum_{i=1}^m p_i = \sum_{i=1}^{n}q_i</math> z superźródła do superujścia. Co więcej w przepływ z superźródła do superujścia nie może być większy niż <math>\sum_{i=1}^m p_i = \sum_{i=1}^{n}q_i</math>, ponieważ taka jest przepustowość rozcięcia <math>(s,V-s)</math>. | ||
</div> | </div> | ||
</div> | </div> | ||
Linia 43: | Linia 43: | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed">'''Rozwiązanie''' | <div class="mw-collapsible mw-made=collapsible mw-collapsed">'''Rozwiązanie''' | ||
<div class="mw-collapsible-content" style="display:none"> | <div class="mw-collapsible-content" style="display:none"> | ||
Niech <math>S</math> będzie zbiorem krawędzi o liczności <math>k</math> których usunięcie rozspójnia <math>G</math>, tzn. po usunięciu <math>S</math> <math>G</math> rozpada się na dwie składowe <math>V_1</math> i <math>V_2</math> między którymi nie prowadzi żadna krawędź i <math>V_1 \cup V_2 = V </math>. Jeżeli założymy, że każda krawędź w grafie ma przepustowość <math>1</math>, to <math>(V_1,V_2)</math> jest rozcięciem grafu o przepustowości <math>k</math>. Zauważmy, że dowolny wierzchołek <math>v</math> musi należeć do <math>V_1</math> bądź <math>V_2</math>. | Niech <math>S</math> będzie zbiorem krawędzi o liczności <math>k</math> których usunięcie rozspójnia <math>G</math>, tzn. po usunięciu <math>S</math> <math>G</math> rozpada się na dwie składowe <math>V_1</math> i <math>V_2</math> między którymi nie prowadzi żadna krawędź i <math>V_1 \cup V_2 = V</math>. Jeżeli założymy, że każda krawędź w grafie ma przepustowość <math>1</math>, to <math>(V_1,V_2)</math> jest rozcięciem grafu o przepustowości <math>k</math>. Zauważmy, że dowolny wierzchołek <math>v</math> musi należeć do <math>V_1</math> bądź <math>V_2</math>. | ||
</div> | </div> | ||
</div> | </div> |
Aktualna wersja na dzień 11:27, 5 wrz 2023
Zadanie 1
Udowodnij Lemat 1 z tego wykładu.
Zadanie 2
W problemie maksymalnego przepływu z wieloma źródłami i ujściami mamy daną sieć przepływową , zbiór źródeł oraz zbiór ujść i chcemy wyznaczyć maksymalny sumaryczny przepływ ze źródeł do ujść . Zaproponuj efektywny algorytm rozwiązujący ten problem?
Zadanie 3
Załóżmy, że w problemie maksymalnego przepływu z wieloma źródłami i ujściami, z każdego źródła wypływa dokładnie jednostek przepływu. Natomiast do każdego ujścia musi wpłynąć dokładnie jednostek przepływu tak, że . Pokaż jak sprowadzić problem znalezienia przepływu spełniającego te dodatkowe założenia do problemu znajdowania przepływu z jednym ujściem i źródłem?
Zadanie 4
Spójność krawędziową nieskierowanego grafu definiujemy jako minimalną liczbę krawędzi które muszą zostać usunięte z grafu żeby przestał on być spójny. Na przykład spójność krawędziowa drzewa wynosi , natomiast spójność krawędziowa cyklu wynosi . Pokaż jak wyznaczyć spójność krawędziową nieskierowanego grafu poprzez krotne uruchomienie algorytmu wyznaczającego maksymalny przepływ w grafie na sieciach przepływowych o wierzchołkach i krawędziach.