Zaawansowane algorytmy i struktury danych/Ćwiczenia 6: Różnice pomiędzy wersjami
Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Nie podano opisu zmian |
Nie podano opisu zmian |
||
Linia 1: | Linia 1: | ||
== Zadanie 1 == | |||
{{kotwica 1|zadanie 1|}} | |||
Pokaż, że [[..\wyklad 6\iloczyn_odległości|iloczyn odległości]] jest przemienny względem dodawania, tzn, że dla macierzy <math>C</math>, <math>D</math> | |||
i <math>E</math> rozmiaru <math>n\times n</math>zachodzi: | |||
<center><math> C \times_{\min} \left(D + E \right)= C \times_{\min} | |||
D + C \times_{min} E, </math></center> | |||
oraz | |||
<center><math> | |||
\left(D + E \right) \times_{\min} C = D \times_{\min} C + E \times_{min} C. | |||
</math></center> | |||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> '''Wskazówka''' | |||
<div class="mw-collapsible-content" style="display:none"> | |||
Te dwie równości wynikają ponownie z definicji iloczynu odległości [[#wzór_1|wzoru (1)]] oraz przemienności operacji <math>\min</math> | |||
względem dodawania. | |||
</div> | |||
</div> | |||
== Zadanie 2 == | |||
{{kotwica|zadanie 2|}} | |||
Zaproponuj jak wykorzystać algorytm Bellmana-Forda do sprawdzenia, czy w grafie <math>G=(V,E)</math> i wagach krawędzi opisanych funkcją <math>w:E \to \mathcal{R}</math> istnieje cykl o ujemnej wadze. | |||
<div class="mw-collapsible mw-made=collapsible mw-collapsed">'''Rozwiązanie''' | |||
<div class="mw-collapsible-content" style="display:none"> | |||
Dodaj nowy wierzchołek <math>s</math> i skonstruuj graf <math>G'=(V',E')</math> i | |||
funkcję wagową <math>w'</math> taką, że: | |||
{{wzor2| | |||
<math>V' = V \cup \{s\}</math>, | |||
}} | |||
{{wzor2| | |||
<math>E' = E \cup \{(s,v): v \in V\}</math>, | |||
}} | |||
{{wzor2| | |||
<math>w'(u,v) = \begin{cases}w(u,v), & \mbox{jeżeli} (u,v)\in E\\ 0, & \mbox{jeżeli} u=s\\0, \mbox{w pozostałych przypadkach}\end{cases}</math>. | |||
}} | |||
Zauważmy, że w grafie <math>G'</math> są te same cykle co w grafie <math>G</math>. Jednak teraz wszystkie te cykle są osiągalne z wierzchołka <math>s</math>. Możemy więc do wykrycia cykli o ujemnej wadze użyć algorytmu Bellmana-Forda uruchomionego dla wierzchołka <math>s</math>. | |||
</div> | |||
</div> | |||
== Zadanie 3 == | |||
{{kotwica|zadanie 3|}} | |||
Mając dane graf <math>G=(V,E)</math>, funkcję wagową <math>w:E \to \mathcal{R}</math>, odległości <math>d(v)</math> z wybranego wierzchołka <math>s</math> do <math>v</math> w grafie <math>G</math>, zaproponuj algorytm obliczania [[Wykład 5#drzewo_najkrótszych_ścieżek|drzewa najkrótszych ścieżek]] w czasie <math>O(|E|).</math> | |||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> '''Wskazówka''' | |||
<div class="mw-collapsible-content" style="display:none"> | |||
W celu otrzymania drzewa najkrótszych ścieżek z grafu <math>G</math> usuniemy krawędzie, które na pewno nie należą do żadnej najkrótszej ścieżki. Zdefiniujmy graf <math>G_{d} = (V,E_{d})</math> jako: | |||
<center><math> E_{d} = \{(u,v): (u,v)\in E \mbox{ i } d(u) + w(u,v) = d(v). \} </math></center> | |||
Zauważmy, że wszystkie ścieżki w <math>G_{d}</math> są najkrótszymi ścieżkami, a więc dowolne drzewo przeszukiwania grafu <math>G_{d}</math> ukorzenione w <math>s</math> jest drzewem najkrótszych ścieżek. | |||
</div> | |||
</div> |
Wersja z 22:04, 27 lip 2006
Zadanie 1
Pokaż, że iloczyn odległości jest przemienny względem dodawania, tzn, że dla macierzy , i rozmiaru zachodzi:
oraz
Wskazówka
Zadanie 2
Zaproponuj jak wykorzystać algorytm Bellmana-Forda do sprawdzenia, czy w grafie i wagach krawędzi opisanych funkcją istnieje cykl o ujemnej wadze.
Rozwiązanie
Zadanie 3
Mając dane graf , funkcję wagową , odległości z wybranego wierzchołka do w grafie , zaproponuj algorytm obliczania drzewa najkrótszych ścieżek w czasie
Wskazówka