ASD Ćwiczenia 11: Różnice pomiędzy wersjami
Nie podano opisu zmian |
Nie podano opisu zmian |
||
(Nie pokazano 2 pośrednich wersji utworzonych przez tego samego użytkownika) | |||
Linia 15: | Linia 15: | ||
4 '''begin''' | 4 '''begin''' | ||
5 <math>i := i+1</math>; | 5 <math>i := i+1</math>; | ||
6 '''if''' graf <math>(V,F\cup \{e_i | 6 '''if''' graf <math>(V,F\cup \{e_i\})</math> nie zawiera cyklu '''then''' | ||
7 <math>F := F \cup \{e_i\}</math> | 7 <math>F := F \cup \{e_i\}</math> | ||
8 '''end'''; | 8 '''end'''; | ||
Linia 42: | Linia 42: | ||
<div class="mw-collapsible-content" style="display:none"> | <div class="mw-collapsible-content" style="display:none"> | ||
Za każdym razem, gdy w wierszu 17 aktualizujemy wartość <math>w[v]</math> na <math>w[u]+w(u-v)</math>, należy w zmiennej <math>p[v]</math> zapamiętać wierzchołek <math>u</math>. Po zakończeniu wykonywania algorytmu najlżejszą ścieżkę z <math>v</math> do <math>s</math> tworzą wierzchołki <math>v, p[v], p[p[v]], \ldots, | Za każdym razem, gdy w wierszu 17 aktualizujemy wartość <math>w[v]</math> na <math>w[u]+w(u-v)</math>, należy w zmiennej <math>p[v]</math> zapamiętać wierzchołek <math>u</math>. Po zakończeniu wykonywania algorytmu najlżejszą ścieżkę z <math>v</math> do <math>s</math> tworzą wierzchołki <math>v, p[v], p[p[v]], \ldots, s</math>. | ||
</div> | </div> | ||
</div> | </div> | ||
==Zadanie 4== | ==Zadanie 4== | ||
Niech <math>G=(V,E)</math> będzie spójnym grafem z wagami <math>w</math> i niech <math>s</math> będzie wyróżnionym wierzchołkiem. Dla każdego wierzchołka <math>v \in V</math> ustalmy jedną, najlżejszą ścieżkę łączącą <math>v</math> z <math>s</math>. | Niech <math>G=(V,E)</math> będzie spójnym grafem z wagami <math>w</math> i niech <math>s</math> będzie wyróżnionym wierzchołkiem. Dla każdego wierzchołka <math>v \in V</math> ustalmy jedną, najlżejszą ścieżkę łączącą <math>v</math>z<math>s</math>. | ||
a) Niech <math>F</math> będzie zbiorem wszystkich krawędzi występujących na ustalonych ścieżkach. Udowodnij, że podgraf <math>H=(V,F)</math> jest drzewem. Drzewo <math>H</math> nazywamy ''drzewem najlżejszych ścieżek''. Może być wiele drzew najlżejszych ścieżek. | a) Niech <math>F</math> będzie zbiorem wszystkich krawędzi występujących na ustalonych ścieżkach. Udowodnij, że podgraf <math>H=(V,F)</math> jest drzewem. Drzewo <math>H</math> nazywamy ''drzewem najlżejszych ścieżek''. Może być wiele drzew najlżejszych ścieżek. |
Aktualna wersja na dzień 10:18, 31 sie 2023
Niech będzie grafem spójnym, a funkcją, która każdej krawędzi przypisuje nieujemną, całkowitoliczbową wagę . Dla każdego podgrafu definujemy wagę jako sumę wag jego krawędzi. Drzewo rozpinające grafu , którego waga jest nie większa od wagi każdego innego drzewa rozpinającego w tym grafie, nazywamy minimalnym drzewem rozpinającym grafu . W grafie może być więcej niż jedno drzewo rozpinające.
Zadanie 1
Udowodnij, że jeśli wagi krawędzi są parami różne, to w grafie istnieje dokładnie jedno minimalne drzewo rozpinające.
Wskazówka
Zadanie 2
Załóżmy, że graf jest reprezentowany przez listy sąsiedztw i krawędzie grafu są już posortowane niemalejąco według wag. Zaproponuj algorytm, który w czasie obliczy dla G minimalne drzewo rozpinające.
Wskazówka
Zadanie 3
W przedstawionym przez nas algorytmie Dijkstry obliczaliśmy długości najlżejszych ścieżek łączących wszystkie wierzchołki grafu z wyróżnionym wierzchołkiem . Zastanów się, w jaki sposób poprawić algorytm Dijkstry, żeby po zakończeniu jego działania można było dla każdego wierzchołka wyznaczyć najlżejszą ścieżkę łączącą ten wierzchołek z w czasie proporcjonalnym do długości tej ścieżki.
Rozwiązanie
Zadanie 4
Niech będzie spójnym grafem z wagami i niech będzie wyróżnionym wierzchołkiem. Dla każdego wierzchołka ustalmy jedną, najlżejszą ścieżkę łączącą z.
a) Niech będzie zbiorem wszystkich krawędzi występujących na ustalonych ścieżkach. Udowodnij, że podgraf jest drzewem. Drzewo nazywamy drzewem najlżejszych ścieżek. Może być wiele drzew najlżejszych ścieżek.
b) W rozwiązaniu zadania 3 pokazaliśmy, w jaki sposób obliczyć drzewo najlżejszych ścieżek algorytmem Dijkstry. Zmodyfikuj algorytm Dijsktry w taki sposób, żeby posłużył on do obliczania minimalnego drzewa rozpinającego.
Rozwiązanie