background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Algorytmy 

i

struktury danych

WYKŁAD 6

dr inż. Krzysztof Pancerz

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Algorytmy grafowe

Wyszukiwanie najkrótszej ścieżki

algorytm Dijkstry

Wyznaczanie minimalnego drzewa 
rozpinającego

algorytm Kruskala

algorytm Prima

Przeszukiwanie

Przeszukiwanie w głąb

Przeszukiwanie wszerz

Wyznaczanie silnie spójnych składowych

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Przeszukiwanie w głąb

Wybieramy wierzchołek startowy v. Oznaczamy 
jako odwiedzony.

Rekurencyjnie stosujemy metodę 
przeszukiwania zstępującego do wszystkich 
wierzchołków będących sąsiadami wierzchołka 
v.

Jeśli wszystkie wierzchołki, które mogą zostać 
odwiedzone przeszukiwaniem zstępującym 
zostły odwiedzone, to wybieramy nowy 
wierchołek startowy (taki, który do tej pory nie 
został odwiedzony) i powtarzamy 
przeszukiwanie.

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Przeszukiwanie wszerz

Wybieramy wierzchołek startowy v. Oznaczamy 
jako odwiedzony.

Odwiedzamy każdy wierzchołek osiągalny z 
wierzchołka v, który do tej pory nie był 
odwiedzony.

Jeśli wszystkie wierzchołki osiągalne z 
wierzchołka zostaną odwiedzone, to 
wybieramy nowy wierzchołek startowy (taki, 
który do tej pory nie został odwiedzony) i 
powtarzamy przeszukiwanie.

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Drzewa rozpinające

G – graf spójny z wagami.

Drzewo rozpinające – podgraf grafu G, który 
jest drzewem zawierającym wszystkie 
wierzchołki grafu G.

Minimalne drzewo rozpinające – drzewo 
rozpinające, dla którego suma wag krawędzi 
jest minimalna. 

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Przykład

G=(V,E,w) – graf spójny z wagami.

Wierzchołki reprezentują miasta.

Krawędzie reprezentują drogi pomiędzy 
miastami.

Wagi reprezentują koszty przejazdów 
poszczególnymi drogami.

Problem: Znaleźć zbiór dróg łączących 
wszystkie miasta, dla którego sumaryczny koszt 
przejazdu drogami jest minimalny.

Rozwiązanie: Znaleźć minimalne drzewo 
rozpinające.

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Przykład (cd.)

Graf G

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Przykład (cd.)

Minimalne drzewo rozpinające grafu G

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Algorytm Kruskala

Algorytm Kruskala jest algorytmem zachłannym 
znajdującym minimalne drzewo rozpinające 
danego grafu spójnego z wagami.

Reguła zachłanna: dodaj krawędź o minimalnej 
wadze, która nie tworzy cyklu.

Rozwiązanie częściowe nie musi być drzewem. 
 

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Algorytm Kruskala (cd.)

Wejście

G=(V,E,w) – graf spójny z wagami.

Wyjście

T – zbiór wierzchołków minimalnego drzewa 

rozpinającego grafu G.

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Algorytm Kruskala (cd.)

T=Φ

utwórz rozłączne podzbiory zbioru V (każdy podzbiór zawiera 

jeden wierzchołek ze zbioru V)

sortuj zbiór krawędzi E w porządku niemalejącym ze względu na 

wagi krawędzi 

while (nie wszystkie podzbiory są połączone) 

{    wybierz kolejną krawędź ze zbioru E

if(łączy dwa wierzchołki z podzbiorów rozłączonych)
{

połącz podzbiory
dodaj krawędź do zbioru T

}

}   

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Algorytm Prima

Algorytm Prima jest algorytmem zachłannym 
znajdującym minimalne drzewo rozpinające 
danego grafu spójnego z wagami.

Reguła zachłanna: dodaj krawędź o minimalnej 
wadze, która ma jeden wierzchołek w bieżącym 
drzewie a drugi, który nie należy do bieżącego 
drzewa.

Każde rozwiązanie częściowe jest drzewem.

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Prim's Algorithm (cont.)

Wejście

G=(V,E,w) – graf spójny z wagami, 

          – wierzchołek startowy. 

Wyjście

T – zbiór wierzchołków minimalnego drzewa 

rozpinającego grafu G.

v

V

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Algorytm Prima (cd.)

T=Φ
U
={v}
while (UV
{

znajdź krawędź                o minimalnej wadze taką, 

że           oraz 

}   

 x , y∈E

x

U

y

U

T

=∪{x , y}

U

=∪{ }

background image

 

Krzysztof Pancerz

Algorytmy i struktury danych

Algorytm Dijkstry

Problem: znaleźć najkrótsze ścieżki z danego 
wierzchołka do wszytkich pozostałych 
wierzchołów w grafie spójnym z wagami.

Wejście:

                         - graf spójny z wagami.

           – dany wierzchołek.

Reguła zachłanna: Spośród wszystkich 
wierzchołków, które mogą przedłużyć 
najkrótszą ścieżkę do tej pory znalezioną, 
wybierz ten, którego dodanie prowadzi dalej do 
najkrótszej ścieżki.

G

=V , E , w

e

E