Najkrótsze ścieżki
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków
Grafy
Algorytmy grafowe — wyszukiwanie najkrótszych ścieżek i minimalnych
drzew spinających
Rafał Nowak
Instytut Informatyki
Wydział Matematyki i Informatyki
Uniwersytet Wrocławski
O czym to będzie?
1 Grafy - wprowadzenie
Co to jest graf?
Definicja (nieformalna)
Graf to zbiór wierzchołków połączonych krawędziami
Co to jest graf?
Definicja (nieformalna)
Graf to zbiór wierzchołków połączonych krawędziami
Przykłady
START b
Definicja (formalna)
a
Graf to para hV, Ei, gdzie V - oznacza zbiór wierzchołków,
a a b
a E ⊂ V × V oznacza zbiór krawędzi. Krawędź hu, vi ∈ E
b jest
ab parą uporządkowaną, w wypadku grafów skierowanych
a a b
— digrafów,
aba
parą nieuporządkowaną, w wypadku grafów
nieskierowanych
a
abaa b
Definicja
b
Ścieżka to ciąg krawędzi hu1 , u2 i, hu2 , u3 i, . . . , hun−1 , un i
a abaab
abaaba
Wzorzec = abaaba
a 0
Definicja
b e Cyklem nazywamy ścieżkę dla której u1 = un , tj. zaczynającą
i kończącą się w tym samym wierzchołku.
c
1,0
2,2
1,1
1,2
2,1
1,2
a 0
Definicja
b e Cyklem nazywamy ścieżkę dla której u1 = un , tj. zaczynającą
i kończącą się w tym samym wierzchołku.
c
Definicja
d
Stopniem wierzchołka u nazywamy liczbę krawędzi z nim
1,0 połączonych. Dla grafów skierowanych można mówić o stopniu
wejściowym i wyjściowym.
2,2
1,1
1,2
2,1
1,2
a 0
Definicja
b e Cyklem nazywamy ścieżkę dla której u1 = un , tj. zaczynającą
i kończącą się w tym samym wierzchołku.
c
Definicja
d
Stopniem wierzchołka u nazywamy liczbę krawędzi z nim
1,0 połączonych. Dla grafów skierowanych można mówić o stopniu
wejściowym i wyjściowym.
2,2
Definicja (spójność)
1,1
Graf nieskierowany G jest spójny, jeśli każda para wierzchołków
jest połączona pewną ścieżką.
1,2
2,1
1,2
a 0
Definicja
b e Cyklem nazywamy ścieżkę dla której u1 = un , tj. zaczynającą
i kończącą się w tym samym wierzchołku.
c
Definicja
d
Stopniem wierzchołka u nazywamy liczbę krawędzi z nim
1,0 połączonych. Dla grafów skierowanych można mówić o stopniu
wejściowym i wyjściowym.
2,2
Definicja (spójność)
1,1
Graf nieskierowany G jest spójny, jeśli każda para wierzchołków
jest połączona pewną ścieżką.
1,2
Definicja (acykliczność)
2,1
Definicja
Drzewem nazywamy acykliczny graf spójny
Definicja
Drzewem nazywamy acykliczny graf spójny
Twierdzenie
Niech graf G ma n wierzchołków; poniższe zdania są równoważne:
G jest drzewem
G jest spójny i ma n − 1 krawędzi
G jest acykliczny i ma n − 1 krawędzi
O czym to będzie?
1 Grafy - wprowadzenie
Problem
Definicja
Odległością wierzchołka u od v jest długość najkrótszej ścieżki łączej u
z v, przy czym, na razie, długość ścieżki określamy jako liczbę jej
krawędzi.
Problem
Definicja
Odległością wierzchołka u od v jest długość najkrótszej ścieżki łączej u
z v, przy czym, na razie, długość ścieżki określamy jako liczbę jej
krawędzi.
Problem
Dane:
graf (skierowany) G = hV, Ei
pewien wierzchołek u ∈ V (źródło, ujście)
Problem
Definicja
Odległością wierzchołka u od v jest długość najkrótszej ścieżki łączej u
z v, przy czym, na razie, długość ścieżki określamy jako liczbę jej
krawędzi.
Problem
Dane:
graf (skierowany) G = hV, Ei
pewien wierzchołek u ∈ V (źródło, ujście)
Wynik:
odległości wierzchołka u do wszystkich pozostałych wierzchołków
Problem
Definicja
Odległością wierzchołka u od v jest długość najkrótszej ścieżki łączej u
z v, przy czym, na razie, długość ścieżki określamy jako liczbę jej
krawędzi.
Problem
Dane:
graf (skierowany) G = hV, Ei
pewien wierzchołek u ∈ V (źródło, ujście)
Wynik:
odległości wierzchołka u do wszystkich pozostałych wierzchołków
najkrótsze ścieżki wyznaczające te odległości
Przykład 1 (drzewo)
13
11 14
9
10
1
3
4 2
6
7
5
8
12
Przykład 1 (drzewo)
INF
INF INF
INF
INF
INF
INF
INF INF
INF
INF
0
INF
INF
Przykład 1 (drzewo)
4 4
4
3
2
2
3 1
4
3
0
4
4
Przykład 1 (drzewo)
INF
INF INF
INF
INF
INF
INF
INF INF
INF
INF
0
INF
INF
Przykład 1 (drzewo)
INF
INF INF
INF
INF
INF
INF
INF 1
INF
INF
0
INF
INF
Przykład 1 (drzewo)
INF
INF INF
INF
INF
INF
INF
INF 1
INF
INF
0
INF
INF
Przykład 1 (drzewo)
INF
INF INF
INF
INF
2
INF
INF 1
INF
INF
0
INF
INF
Przykład 1 (drzewo)
INF
INF INF
INF
INF
2
2
INF 1
INF
INF
0
INF
INF
Przykład 1 (drzewo)
INF
INF INF
INF
INF
2
2
INF 1
INF
INF
0
INF
INF
Przykład 1 (drzewo)
INF
INF INF
INF
INF
2
2
INF 1
INF
3
0
INF
INF
Przykład 1 (drzewo)
INF
INF INF
INF
3
2
2
INF 1
INF
3
0
INF
INF
Przykład 1 (drzewo)
INF
INF INF
INF
3
2
2
INF 1
INF
3
0
INF
INF
Przykład 1 (drzewo)
INF
INF INF
INF
3
2
2
3 1
INF
3
0
INF
INF
Przykład 1 (drzewo)
INF
INF INF
INF
3
2
2
3 1
INF
3
0
INF
INF
Przykład 1 (drzewo)
INF
INF INF
INF
3
2
2
3 1
4
3
0
4
4
Przykład 1 (drzewo)
INF
INF INF
INF
3
2
2
3 1
4
3
0
4
4
Przykład 1 (drzewo)
INF
4 4
4
3
2
2
3 1
4
3
0
4
4
Przykład 1 (drzewo)
INF
4 4
4
3
2
2
3 1
4
3
0
4
4
Przykład 1 (drzewo)
INF
4 4
4
3
2
2
3 1
4
3
0
4
4
Przykład 1 (drzewo)
INF
4 4
4
3
2
2
3 1
4
3
0
4
4
Przykład 1 (drzewo)
INF
4 4
4
3
2
2
3 1
4
3
0
4
4
Przykład 1 (drzewo)
INF
4 4
4
3
2
2
3 1
4
3
0
4
4
Przykład 1 (drzewo)
INF
4 4
4
3
2
2
3 1
4
3
0
4
4
Przykład 1 (drzewo)
4 4
4
3
2
2
3 1
4
3
0
4
4
Przykład 1 (drzewo)
4 4
4
3
2
2
3 1
4
3
0
4
4
Przykład 1 (drzewo)
4 4
4
3
2
2
3 1
4
3
0
4
4
Przykład 1 (drzewo)
4 4
4
3
2
2
3 1
4
3
0
4
4
Przykład 2
INF INF
INF INF
INF
Przykład 2
INF INF
INF INF
INF
Przykład 2
INF INF
1 INF INF
INF INF
INF
Przykład 2
INF INF
1 1 INF
INF INF
INF
Przykład 2
INF INF
1 1 INF
INF INF
INF
Przykład 2
INF INF
1 1 2
INF INF
INF
Przykład 2
INF INF
1 1 2
INF 2 INF
INF INF
INF
Przykład 2
INF INF
1 1 2
INF 2 INF
INF INF
INF
Przykład 2
INF INF
1 1 2
2 2 INF
INF INF
INF
Przykład 2
INF INF
1 1 2
2 2 INF
INF INF
INF
Przykład 2
2 INF
1 1 2
0 2 2 2
2 2 INF
INF INF
INF
Przykład 2
2 INF
1 1 2
0 2 2 2
2 2 INF
INF INF
INF
Przykład 2
2 INF
2 1 3 INF INF
1 1 2
0 2 2 2
2 2 INF
INF INF
INF
Przykład 2
2 INF
2 1 3 INF INF
1 1 2
0 2 2 2
2 2 INF
INF INF
INF
Przykład 2
2 INF
2 1 3 INF INF
1 1 2
0 2 2 2
2 2 INF
3 INF
INF
Przykład 2
2 INF
2 1 3 INF INF
1 1 2
0 2 2 2
2 2 INF
3 INF
INF
Przykład 2
2 INF
2 1 3 INF INF
1 1 2
0 2 2 2
2 2 INF
3 INF
INF
Przykład 2
2 INF
2 1 3 INF INF
1 1 2
0 2 2 2
2 2 INF
3 INF
INF
Przykład 2
2 INF
2 1 3 INF INF
1 1 2
0 2 2 2
2 2 INF
3 INF
INF
Przykład 2
2 INF
2 1 3 INF INF
1 1 2
0 2 2 2
2 2 INF
3 INF
INF
Przykład 2
2 INF
2 1 3 INF INF
1 1 2
0 2 2 2
2 2 INF
3 INF
INF
Przykład 2
2 INF
2 1 3 INF INF
1 1 2
0 2 2 2
2 2 INF
3 INF
INF
Przykład 2
2 4
2 1 3 INF INF
1 1 2
0 2 2 2
2 2 INF
3 INF
INF
Przykład 2
2 4
2 1 3 INF INF
1 1 2
0 2 2 2
2 2 INF
3 INF
INF
Przykład 2
2 4
2 1 3 INF INF
1 1 2
0 2 2 2
2 2 4
3 INF
INF
Przykład 2
2 4
2 1 3 INF INF
1 1 2
0 2 2 2
2 2 4
3 INF
INF
Przykład 2
2 4
2 1 3 5 5
1 1 2
0 2 2 2
2 2 4
3 INF
INF
Przykład 2
2 4
2 1 3 5 5
1 1 2
0 2 2 2
2 2 4
3 INF
INF
Przykład 2
2 4
2 1 3 5 5
1 1 2
0 2 2 2
2 2 4
3 5
INF
Przykład 2
2 4
2 1 3 5 5
1 1 2
0 2 2 2
2 2 4
3 5
INF
Przykład 2
2 4
2 1 3 5 5
1 1 2
0 2 2 2
2 2 4
3 5
INF
Przykład 2
2 4
2 1 3 5 5
1 1 2
0 2 2 2
2 2 4
3 5
INF
Przykład 2
2 4
2 1 3 5 5
1 1 2
0 2 2 2
2 2 4
3 5
Przykład 2
2 4
2 1 3 5 5
1 1 2
0 2 2 2
2 2 4
3 5
Przykład 2
2 4
2 1 3 5 5
1 1 2
0 2 2 2
2 2 4
3 5
Problem
Problem
Problem
a B
Problem
15 10 10 10
Dane:
b C A
ważony graf (skierowany)
10 8 7 8
G = hV, E, c : E → h0, ∞)i
c D
pewien wierzchołek u ∈ V (źródło, ujście)
7
Problem
a B
Problem
15 10 10 10
Dane:
b C A
ważony graf (skierowany)
10 8 7 8
G = hV, E, c : E → h0, ∞)i
c D
pewien wierzchołek u ∈ V (źródło, ujście)
7
Wynik:
d
odległości wierzchołka u do wszystkich
pozostałych wierzchołków
Problem
a B
Problem
15 10 10 10
Dane:
b C A
ważony graf (skierowany)
10 8 7 8
G = hV, E, c : E → h0, ∞)i
c D
pewien wierzchołek u ∈ V (źródło, ujście)
7
Wynik:
d
odległości wierzchołka u do wszystkich
pozostałych wierzchołków
najkrótsze ścieżki wyznaczające te odległości
1
INF INF
6
2
INF
INF
100 5
INF 0
100
100
INF
1
INF INF
6
2
INF
5
100 5
INF 0
100
100
INF
1
INF INF
6
2
INF
5
100 5
INF 0
100
100
100
1
INF INF
6
2
INF
5
100 5
INF 0
100
100
100
1
INF 11
2 6
INF
5
100 5
INF 0
100
100
100
1
INF 11
2 6
INF
5
100 5
INF 0
100
100
100
1
INF 11
2 6
INF
5
100 5
200 0
100
100
100
1
INF 11
2 6
INF
5
100 5
200 0
100
100
100
1
12 11
2 6
INF
5
100 5
200 0
100
100
100
1
12 11
2 6
INF
5
100 5
200 0
100
100
100
1
12 11
2 6
300
5
100 5
200 0
100
100
100
1
12 11
2 6
300
5
100 5
200 0
100
100
100
1
12 11
2 6
300
5
100 5
200 0
100
100
100
1
12 11
2 6
300
5
100 5
200 0
100
100
100
1
INF INF
6
2
INF INF
100 5
INF 0
100
100
INF
1
INF INF
6
2
INF 5
100 5
INF 0
100
100
INF
1
INF INF
6
2
INF 5
100 5
INF 0
100
100
100
1
INF INF
6
2
INF 5
100 5
INF 0
100
100
100
1
INF 11
2 6
INF 5
100 5
INF 0
100
100
100
1
INF 11
2 6
INF 5
100 5
INF 0
100
100
100
1
12 11
2 6
INF 5
100 5
INF 0
100
100
100
1
12 11
2 6
INF 5
100 5
INF 0
100
100
100
1
12 11
2 6
14 5
100 5
INF 0
100
100
100
1
12 11
2 6
14 5
100 5
INF 0
100
100
100
1
12 11
2 6
14 5
100 5
114 0
100
100
100
1
12 11
2 6
14 5
100 5
114 0
100
100
100
1
12 11
2 6
14 5
100 5
114 0
100
100
100
1
12 11
2 6
14 5
100 5
114 0
100
100
100
Przykład
INF
15 2 10 1
2 5 50 10
18 12 10 1 4 18
INF 10 INF
30 4 6
INF INF 6
20
INF
Przykład
INF
15 2 10 1
2 5 50 10
18 12 10 1 4 18
INF 10 INF
30 4 6
INF INF 6
20
INF
Przykład
15
15 2 10 1
2 5 50 10
18 12 10 1 4 18
INF 10 INF
30 4 6
INF INF 6
20
INF
Przykład
15
15 2 10 1
2 5 50 10
18 12 10 1 4 18
INF 10 INF
30 4 6
INF INF 6
20
INF
Przykład
15
15 2 10 1
2 5 50 10
18 12 10 1 4 18
20 10 INF
30 4 6
INF INF 6
20
INF
Przykład
15
15 2 10 1
2 5 50 10
18 12 10 1 4 18
20 10 INF
30 4 6
INF INF 6
20
INF
Przykład
15
15 2 10 1
2 5 50 10
18 12 10 1 4 18
20 10 INF
30 4 6
INF INF 6
20
INF
Przykład
15
15 2 10 1
2 5 50 10
18 12 10 1 4 18
20 10 INF
30 4 6
INF INF 6
20
33
Przykład
15
15 2 10 1
0 INF 7 13 INF 80 25 16
2 5 50 10
18 12 10 1 4 18
20 10 INF
30 4 6
INF INF 6
20
33
Przykład
15
15 2 10 1
0 INF 7 13 INF 80 25 16
2 5 50 10
2 10 INF 28 INF 13
18 12 10 1 4 18
20 10 INF
30 4 6
INF INF 6
20
33
Przykład
15
15 2 10 1
0 INF 7 13 INF 80 25 16
2 5 50 10
2 10 22 28 INF 13
18 12 10 1 4 18
20 10 INF
30 4 6
INF INF 6
20
33
Przykład
15
15 2 10 1
0 INF 7 13 17 80 25 16
2 5 50 10
2 10 22 28 INF 13
18 12 10 1 4 18
20 10 INF
30 4 6
INF INF 6
20
33
Przykład
15
15 2 10 1
0 INF 7 13 17 80 25 16
2 5 50 10
2 10 22 28 95 13
18 12 10 1 4 18
20 10 INF
30 4 6
INF INF 6
20
33
Przykład
15
15 2 10 1
0 INF 7 13 17 80 25 16
2 5 50 10
2 10 22 28 95 13
18 12 10 1 4 18
20 10 INF
30 4 6
INF INF 6
20
33
Przykład
15
15 2 10 1
0 INF 7 13 17 80 25 16
2 5 50 10
2 10 22 28 95 13
18 12 10 1 4 18
20 10 INF
30 4 6
INF INF 6
20
33
Przykład
15
15 2 10 1
0 INF 7 13 17 80 25 16
2 5 50 10
2 10 22 28 95 13
18 12 10 1 4 18
20 10 30
30 4 6
INF INF 6
20
33
Przykład
15
15 2 10 1
0 INF 7 13 17 80 25 16
2 5 50 10
2 10 22 27 95 13
18 12 10 1 4 18
20 10 30
30 4 6
INF INF 6
20
33
Przykład
15
15 2 10 1
0 INF 7 13 17 80 25 16
2 5 50 10
2 10 22 27 95 13
18 12 10 1 4 18
20 10 30
30 4 6
INF INF 6
20
33
Przykład
15
15 2 10 1
0 INF 7 13 17 80 25 16
2 5 50 10
2 10 22 21 95 13
18 12 10 1 4 18
20 10 30
30 4 6
INF INF 6
20
33
Przykład
15
15 2 10 1
0 INF 7 13 17 80 25 16
2 5 50 10
2 10 22 21 95 13
18 12 10 1 4 18
20 10 30
30 4 6
50 INF 6
20
33
Przykład
15
15 2 10 1
0 30 7 13 17 80 25 16
2 5 50 10
2 10 22 21 95 13
18 12 10 1 4 18
20 10 30
30 4 6
50 INF 6
20
33
Przykład
15
15 2 10 1
0 30 7 13 17 80 25 16
2 5 50 10
2 10 22 21 95 13
18 12 10 1 4 18
20 10 30
30 4 6
50 24 6
20
33
Przykład
15
15 2 10 1
0 30 7 13 17 80 25 16
2 5 50 10
2 10 22 21 95 13
18 12 10 1 4 18
20 10 30
30 4 6
50 24 6
20
33
Przykład
15
15 2 10 1
0 30 7 13 17 80 25 16
2 5 50 10
2 10 22 21 95 13
18 12 10 1 4 18
20 10 30
30 4 6
50 24 6
20
33
Przykład
15
15 2 10 1
0 27 7 13 17 80 25 16
2 5 50 10
2 10 22 21 95 13
18 12 10 1 4 18
20 10 30
30 4 6
50 24 6
20
33
Przykład
15
15 2 10 1
0 27 7 13 17 80 25 16
2 5 50 10
2 10 22 21 95 13
18 12 10 1 4 18
20 10 30
30 4 6
50 24 6
20
33
Przykład
15
15 2 10 1
0 27 7 13 17 80 25 16
2 5 50 10
2 10 22 21 95 13
18 12 10 1 4 18
20 10 30
30 4 6
50 24 6
20
33
Przykład
15
15 2 10 1
0 27 7 13 17 80 25 16
2 5 50 10
2 10 22 21 95 13
18 12 10 1 4 18
20 10 30
30 4 6
50 24 6
20
33
Przykład
15
15 2 10 1
0 27 7 13 17 80 25 16
2 5 50 10
2 10 22 21 95 13
18 12 10 1 4 18
20 10 30
30 4 6
39 24 6
20
33
Przykład
15
15 2 10 1
0 27 7 13 17 80 25 16
2 5 50 10
2 10 22 21 77 13
18 12 10 1 4 18
20 10 30
30 4 6
39 24 6
20
33
Przykład
15
15 2 10 1
0 27 7 13 17 80 25 16
2 5 50 10
2 10 22 21 77 13
18 12 10 1 4 18
20 10 30
30 4 6
39 24 6
20
33
Przykład
15
15 2 10 1
0 27 7 13 17 80 25 16
2 5 50 10
2 10 22 21 34 13
18 12 10 1 4 18
20 10 30
30 4 6
39 24 6
20
33
Przykład
15
15 2 10 1
0 27 7 13 17 80 25 16
2 5 50 10
2 10 22 21 34 13
18 12 10 1 4 18
20 10 30
30 4 6
39 24 6
20
33
Przykład
15
15 2 10 1
0 27 7 13 17 80 25 16
2 5 50 10
2 10 22 21 34 13
18 12 10 1 4 18
20 10 30
30 4 6
39 24 6
20
33
Przykład
15
15 2 10 1
0 27 7 13 17 80 25 16
2 5 50 10
2 10 22 21 34 13
18 12 10 1 4 18
20 10 30
30 4 6
39 24 6
20
33
Przykład
15
15 2 10 1
0 27 7 13 17 80 25 16
2 5 50 10
2 10 22 21 34 13
18 12 10 1 4 18
20 10 30
30 4 6
39 24 6
20
33
Dijkstra(G, s)
1: dist[s] ← 0; Q.insert(s)
2: for all u ∈ V \ {s} do
3: dist[u] ← ∞; prev[u] ← NIL; Q.insert(u)
4: end for
5: while not Q.empty() do
6: u ← Q.min() {u to wierzchołek z minimalną wartością dist}
7: for all v ∈ Adj[u] do
8: if dist[u] + c (hu, vi) < dist[v] then
9: dist[v] ← dist[u] + c (hu, vi); prev[v] ← u
10: Q.decreaseKey(v) {uaktualnij kolejkę Q}
11: end if
12: end for
13: Q.delM in() {usuń minimalny wierzchołek z kolejki priorytetowej}
14: end while
Złożoność: O ((m + n) log n) = O n2 log n , O (m + n log n) = O n2 ,
alg. BFS , alg. Prima-Dijkstry
15
15 2 10 1
0 27 7 13 17 80 25 16
2 5 50 10
2 10 22 21 34 13
18 12 10 1 4 18
20 10 30
30 4 6
39 24 6
20
33
O czym to będzie?
1 Grafy - wprowadzenie
Problem
Dane:
nieskierowany graf ważony G = hV, E, ci, c : E → h< 0, ∞)
Wynik:
minimalne drzewo spinające grafu G (ang. minimum spanning tree), tj.
takie drzewo spinające, dla którego suma wag na krawędziach jest
minimalna.
8
18
9
9
10
9
9 3
3 8 7
4
6 2
4 9 5 1
2
9 4
Rafał Nowak Grafy
Wprowadzenie
Najkrótsze ścieżki
Prim-Dijkstra
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków
Problem
Dane:
nieskierowany graf ważony G = hV, E, ci, c : E → h< 0, ∞)
Wynik:
minimalne drzewo spinające grafu G (ang. minimum spanning tree), tj.
takie drzewo spinające, dla którego suma wag na krawędziach jest
minimalna.
8
18
9
9
10
9
9 3
3 8 7
4
6 2
4 9 5 1
2
9 4
Rafał Nowak Grafy
Wprowadzenie
Najkrótsze ścieżki
Prim-Dijkstra
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków
15
15 2 10 1
0 27 7 13 17 80 25 16
2 5 50 10
2 10 22 21 34 13
18 12 10 1 4 18
20 10 30
30 4 6
39 24 6
20
33
15
15 2 10 1
0 5 7 13 2 80 10 1
2 5 50 10
2 10 7 10 4 13
18 12 10 1 4 18
1 10 13
30 4 6
12 4 6
20
Przykład
INF
15 2 10 1
2 5 50 10
18 12 10 1 4 18
INF 10 INF
30 4 6
INF INF 6
20
INF
Przykład
INF
15 2 10 1
2 5 50 10
18 12 10 1 4 18
INF 10 INF
30 4 6
INF INF 6
20
INF
Przykład
15
15 2 10 1
2 5 50 10
18 12 10 1 4 18
INF 10 INF
30 4 6
INF INF 6
20
INF
Przykład
15
15 2 10 1
2 5 50 10
18 12 10 1 4 18
INF 10 INF
30 4 6
INF INF 6
20
INF
Przykład
15
15 2 10 1
2 5 50 10
18 12 10 1 4 18
18 10 INF
30 4 6
INF INF 6
20
INF
Przykład
15
15 2 10 1
2 5 50 10
18 12 10 1 4 18
18 10 INF
30 4 6
INF INF 6
20
INF
Przykład
15
15 2 10 1
2 5 50 10
18 12 10 1 4 18
18 10 INF
30 4 6
INF INF 6
20
INF
Przykład
15
15 2 10 1
2 5 50 10
18 12 10 1 4 18
18 10 INF
30 4 6
INF INF 6
20
18
Przykład
15
15 2 10 1
0 INF 7 13 INF 80 10 1
2 5 50 10
18 12 10 1 4 18
18 10 INF
30 4 6
INF INF 6
20
18
Przykład
15
15 2 10 1
0 INF 7 13 INF 80 10 1
2 5 50 10
2 10 INF 13 INF 13
18 12 10 1 4 18
18 10 INF
30 4 6
INF INF 6
20
18
Przykład
15
15 2 10 1
0 INF 7 13 INF 80 10 1
2 5 50 10
2 10 7 13 INF 13
18 12 10 1 4 18
18 10 INF
30 4 6
INF INF 6
20
18
Przykład
15
15 2 10 1
0 INF 7 13 2 80 10 1
2 5 50 10
2 10 7 13 INF 13
18 12 10 1 4 18
18 10 INF
30 4 6
INF INF 6
20
18
Przykład
15
15 2 10 1
0 INF 7 13 2 80 10 1
2 5 50 10
2 10 7 13 80 13
18 12 10 1 4 18
18 10 INF
30 4 6
INF INF 6
20
18
Przykład
15
15 2 10 1
0 INF 7 13 2 80 10 1
2 5 50 10
2 10 7 13 80 13
18 12 10 1 4 18
18 10 INF
30 4 6
INF INF 6
20
18
Przykład
15
15 2 10 1
0 INF 7 13 2 80 10 1
2 5 50 10
2 10 7 13 80 13
18 12 10 1 4 18
18 10 INF
30 4 6
INF INF 6
20
18
Przykład
15
15 2 10 1
0 INF 7 13 2 80 10 1
2 5 50 10
2 10 7 13 80 13
18 12 10 1 4 18
18 10 13
30 4 6
INF INF 6
20
18
Przykład
15
15 2 10 1
0 INF 7 13 2 80 10 1
2 5 50 10
2 10 7 10 80 13
18 12 10 1 4 18
18 10 13
30 4 6
INF INF 6
20
18
Przykład
15
15 2 10 1
0 INF 7 13 2 80 10 1
2 5 50 10
2 10 7 10 80 13
18 12 10 1 4 18
18 10 13
30 4 6
INF INF 6
20
18
Przykład
15
15 2 10 1
0 5 7 13 2 80 10 1
2 5 50 10
2 10 7 10 80 13
18 12 10 1 4 18
18 10 13
30 4 6
INF INF 6
20
18
Przykład
15
15 2 10 1
0 5 7 13 2 80 10 1
2 5 50 10
2 10 7 10 80 13
18 12 10 1 4 18
10 10 13
30 4 6
INF INF 6
20
18
Przykład
15
15 2 10 1
0 5 7 13 2 80 10 1
2 5 50 10
2 10 7 10 80 13
18 12 10 1 4 18
10 10 13
30 4 6
INF INF 6
20
18
Przykład
15
15 2 10 1
0 5 7 13 2 80 10 1
2 5 50 10
2 10 7 10 80 13
18 12 10 1 4 18
10 10 13
30 4 6
12 INF 6
20
18
Przykład
15
15 2 10 1
0 5 7 13 2 80 10 1
2 5 50 10
2 10 7 10 50 13
18 12 10 1 4 18
10 10 13
30 4 6
12 INF 6
20
18
Przykład
15
15 2 10 1
0 5 7 13 2 80 10 1
2 5 50 10
2 10 7 10 50 13
18 12 10 1 4 18
10 10 13
30 4 6
12 INF 6
20
18
Przykład
15
15 2 10 1
0 5 7 13 2 80 10 1
2 5 50 10
2 10 7 10 50 13
18 12 10 1 4 18
1 10 13
30 4 6
12 INF 6
20
18
Przykład
15
15 2 10 1
0 5 7 13 2 80 10 1
2 5 50 10
2 10 7 10 50 13
18 12 10 1 4 18
1 10 13
30 4 6
12 10 6
20
18
Przykład
15
15 2 10 1
0 5 7 13 2 80 10 1
2 5 50 10
2 10 7 10 50 13
18 12 10 1 4 18
1 10 13
30 4 6
12 10 6
20
18
Przykład
15
15 2 10 1
0 5 7 13 2 80 10 1
2 5 50 10
2 10 7 10 50 13
18 12 10 1 4 18
1 10 13
30 4 6
12 4 6
20
18
Przykład
15
15 2 10 1
0 5 7 13 2 80 10 1
2 5 50 10
2 10 7 10 50 13
18 12 10 1 4 18
1 10 13
30 4 6
12 4 6
20
18
Przykład
15
15 2 10 1
0 5 7 13 2 80 10 1
2 5 50 10
2 10 7 10 50 13
18 12 10 1 4 18
1 10 13
30 4 6
12 4 6
20
18
Przykład
15
15 2 10 1
0 5 7 13 2 80 10 1
2 5 50 10
2 10 7 10 50 13
18 12 10 1 4 18
1 10 13
30 4 6
12 4 6
20
18
Przykład
15
15 2 10 1
0 5 7 13 2 80 10 1
2 5 50 10
2 10 7 10 50 13
18 12 10 1 4 18
1 10 13
30 4 6
12 4 6
20
18
Przykład
15
15 2 10 1
0 5 7 13 2 80 10 1
2 5 50 10
2 10 7 10 50 13
18 12 10 1 4 18
1 10 13
30 4 6
12 4 6
20
Przykład
15
15 2 10 1
0 5 7 13 2 80 10 1
2 5 50 10
2 10 7 10 4 13
18 12 10 1 4 18
1 10 13
30 4 6
12 4 6
20
Przykład
15
15 2 10 1
0 5 7 13 2 80 10 1
2 5 50 10
2 10 7 10 4 13
18 12 10 1 4 18
1 10 13
30 4 6
12 4 6
20
Przykład
15
15 2 10 1
0 5 7 13 2 80 10 1
2 5 50 10
2 10 7 10 4 13
18 12 10 1 4 18
1 10 13
30 4 6
12 4 6
20
Przykład
15
15 2 10 1
0 5 7 13 2 80 10 1
2 5 50 10
2 10 7 10 4 13
18 12 10 1 4 18
1 10 13
30 4 6
12 4 6
20
Dijkstra-Prim(G, s = 1)
1: dist[s] ← 0; Q.insert(s)
2: for all u ∈ V \ {s} do
3: dist[u] ← ∞; prev[u] ← NIL; Q.insert(u)
4: end for
5: while not Q.empty() do
6: u ← Q.min() {u to wierzchołek z minimalną wartością dist}
7: for all v ∈ Adj[u] ∩ Q do
8: if c (hu, vi) < dist[v] then
9: dist[v] ← c (hu, vi); prev[v] ← u
10: Q.decreaseKey(v) {uaktualnij kolejkę Q}
11: end if
12: end for
13: Q.delM in() {usuń minimalny wierzchołek z kolejki priorytetowej}
14: end while
Złożoność: O ((m + n) log n) = O n2 log n , O (m + n log n) = O n2 ,
alg. Dijkstry
O czym to będzie?
1 Grafy - wprowadzenie
Problem
Problem
Dane:
ważony graf (skierowany) G = hV, E, c : E → h0, ∞)i
Problem
Problem
Dane:
ważony graf (skierowany) G = hV, E, c : E → h0, ∞)i
Wynik:
odległości pomiędzy dowolną parą wierzchołków u, v (d[u][v])
najkrótsze ścieżki wyznaczające te odległości
Problem
Problem
Dane:
ważony graf (skierowany) G = hV, E, c : E → h0, ∞)i
Wynik:
odległości pomiędzy dowolną parą wierzchołków u, v (d[u][v])
najkrótsze ścieżki wyznaczające te odległości
Algorytm Naiwny
dla każdego wierzchołka u ∈ V wykonaj
za pomocą algorytmu Dijkstra(G, u) oblicz wartości
d[u][v] ← dist[v]
Złożoność: O (n(m + n) log n) = O n3 log n , O mn + n2 log n = O n3 ,
alg. Dijkstry
Algorytm Floyda-Warshalla
Definicja
Wierzchołkiem wewnętrznym ścieżki hu1 , u2 i, hu2 , u3 i, . . . , hun−1 , un i
nazywamy dowolny wierzchołek ze zbioru {u2 , u3 , . . . , un−1 }.
Algorytm Floyda-Warshalla
Definicja
Wierzchołkiem wewnętrznym ścieżki hu1 , u2 i, hu2 , u3 i, . . . , hun−1 , un i
nazywamy dowolny wierzchołek ze zbioru {u2 , u3 , . . . , un−1 }.
Oznaczenia
Załóżmy, że wierzchołki ze zbioru V są ponumerowane liczbami
naturalnymi od 1 do n.
Algorytm Floyda-Warshalla
Definicja
Wierzchołkiem wewnętrznym ścieżki hu1 , u2 i, hu2 , u3 i, . . . , hun−1 , un i
nazywamy dowolny wierzchołek ze zbioru {u2 , u3 , . . . , un−1 }.
Oznaczenia
Załóżmy, że wierzchołki ze zbioru V są ponumerowane liczbami
naturalnymi od 1 do n.
Niech D[u, v, k] oznacza minimalną długość ścieżki od u do v, której
wierzchołki wewnętrzne należą do zbioru {1, 2, . . . , k},
Algorytm Floyda-Warshalla
Definicja
Wierzchołkiem wewnętrznym ścieżki hu1 , u2 i, hu2 , u3 i, . . . , hun−1 , un i
nazywamy dowolny wierzchołek ze zbioru {u2 , u3 , . . . , un−1 }.
Oznaczenia
Załóżmy, że wierzchołki ze zbioru V są ponumerowane liczbami
naturalnymi od 1 do n.
Niech D[u, v, k] oznacza minimalną długość ścieżki od u do v, której
wierzchołki wewnętrzne należą do zbioru {1, 2, . . . , k},
Naszym zadaniem jest obliczyć D[u, v, n] dla dowolnej pary u, v,
Algorytm Floyda-Warshalla
Definicja
Wierzchołkiem wewnętrznym ścieżki hu1 , u2 i, hu2 , u3 i, . . . , hun−1 , un i
nazywamy dowolny wierzchołek ze zbioru {u2 , u3 , . . . , un−1 }.
Oznaczenia
Załóżmy, że wierzchołki ze zbioru V są ponumerowane liczbami
naturalnymi od 1 do n.
Niech D[u, v, k] oznacza minimalną długość ścieżki od u do v, której
wierzchołki wewnętrzne należą do zbioru {1, 2, . . . , k},
Naszym zadaniem jest obliczyć D[u, v, n] dla dowolnej pary u, v,
Niech
0,
gdy u = v,
D[u, v, 0] = c (hu, vi) , gdy hu, vi ∈ E,
∞, gdy hu, vi ∈
/ E,
plus ścieżka od k do v
D[u,k,k-1] D[k,v,k-1]
u v
plus ścieżka od k do v
D[u,k,k-1] D[k,v,k-1]
u v
Jako D[u, v, k] należy obrać wartość minimalną spośród
dwóch kandydatów.
plus ścieżka od k do v
D[u,k,k-1] D[k,v,k-1]
u v
Jako D[u, v, k] należy obrać wartość minimalną spośród
dwóch kandydatów.
Zależność rekurencyjna
D[u, v, k] ← min ( D[u, v, k − 1], D[u, k, k − 1] + D[k, v, k − 1] )
Dziękuję
Koniec