Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Algorytmy grafowe Minimalne drzewa rozpinające

Podobne prezentacje


Prezentacja na temat: "Algorytmy grafowe Minimalne drzewa rozpinające"— Zapis prezentacji:

1 Algorytmy grafowe Minimalne drzewa rozpinające
Algorytm Kruskala Algorytm Prima Wyszukiwanie najkrótszych ścieżek z jednym źródłem Algorytm Dijkstry Algorytm Bellmana-Forda

2 Minimalne drzewa rozpinające
Podgraf T spójnego grafu G nazywa się jego drzewem rozpinającym, jeśli T jest acykliczny i łączy wszystkie wierzchołki G. Jeśli krawędziom przypisane są wagi, i suma wag krawędzi T jest minimalna, T nazywamy minimalnym drzewem rozpinającym. 4 8 7 9 14 10 2 1 11 6 Przykład minimalnego drzewa rozpinającego

3 Algorytm Kruskala MST-Kruskal(G, w) 1 A := 
2 for każdy wierzchołek vV[G] 3 do Make-Set(v) 4 posortuj krawędzie z E niemalejąco względem wag w 5 for każda krawędź (u,v)  E, w kolejności niemalejących wag 6 do if Find-Set(u)  Find-Set(v) 7 then A := A  {(u,v)} 8 Union(u,v) 9 return A

4 Algorytm Kruskala (przykład)
4 8 7 9 14 10 2 1 11 6 4 8 7 9 14 10 2 1 11 6 4 8 7 9 14 10 2 1 11 6 4 8 7 9 10 11 2 6 1 2 4 8 7 9 14 10 2 1 11 6 4 8 7 9 14 10 2 1 11 6

5 Algorytm Prima MST-Prim(G, w, r) 1 Q := V[G] 2 for każdy uQ
3 do key[u] :=  4 key[r] := 0 5  [r] := NIL 6 while Q   7 do u := Extract-Min(Q) 8 for każdy v  Adj[u] 9 do if vQ i w(u,v) < key[v] then  [v] := u key[v] := w(u,v)

6 Algorytm Prima (przykład)
8 7 4 8 7 9 14 10 2 1 11 6 4 9 14 10 2 1 11 7 8 6 4 8 7 9 14 10 2 1 11 6 2 1 4 8 7 9 10 11 6 4 8 7 9 14 10 2 1 11 6 8 7 4 9 14 10 11 2 7 8 6 1 2

7 Najkrótsze ścieżki z jednym źródłem
Dany jest ważony graf skierowany G=(V,E) i wyróżniony wierzchołek sV, nazywany źródłem; dla każdego wierzchołka vV należy znaleźć najkrótszą ścieżkę z s do v. Wagą ścieżki jest suma wag tworzących ją krawędzi. Najkrótszą ścieżką jest ścieżka o najmniejszej wadze. s 6 3 5 7 11 9 2 1 4 s 6 3 5 7 9 2 1 4 11 Ważony graf skierowany Drzewo najkrótszych ścieżek

8 Najkrótsze ścieżki z jednym źródłem
d[v] - oszacowanie wagi najkrótszej ścieżki, [v] - poprzednik v Initialize-Single-Source(G, s) 1 for każdy wierzchołek vV[G] 2 do d[v] :=  [v] := NIL 4 d[s] := 0 Relaksacja krawędzi - ewentualne zmniejszenie oszacowania wagi najkrótszej ścieżki d[v] Relax(u, v, w) 1 if d[v] > d[u] + w(u, v) 2 then d[v] := d[u] + w(u, v) [v] := u

9 Algorytm Dijkstry Dijkstra(G, w, s) 1 Initialize-Single-Source(G, s)
3 Q := V[G] 4 while Q   5 do u := Extract-Min(Q) S := S  {u} for każdy wierzchołek v  Adj[u] 8 do Relax(u, v, w)

10 Algorytm Dijkstry (przykład)
1 10 5 6 2 3 4 9 7 1 10 5 6 7 14 8 2 3 4 9 s 1 10 5 6 7 9 8 2 3 4 s 1 10 5 6 2 3 4 9 7 1 10 5 6 7 13 8 2 3 4 9 1 s 10 5 6 7 9 8 2 3 4 s s

11 Algorytm Bellmana-Forda
Bellman-Ford(G, w, s) 1 Initialize-Single-Source(G, s) 2 for i = 1 to |V[G]| - 1 3 do for każda krawędź (u, v)  E[G] 4 do Relax(u, v, w) 5 for każda krawędź (u, v)  E[G] 6 do if d[v] > d[u] + w(u, v) then return FALSE 8 return TRUE

12 Algorytm Bellmana-Forda (przykład)
s 5 6 7 2 4 8 3 9 -4 -2 -3 s 5 6 7 -2 4 2 8 3 -4 -3 s 5 6 7 8 3 9 -4 -2 2 -3 s 5 6 7 8 3 9 -4 -2 2 -3 s 5 6 7 2 4 8 3 -4 -2 -3 9


Pobierz ppt "Algorytmy grafowe Minimalne drzewa rozpinające"

Podobne prezentacje


Reklamy Google