Anda di halaman 1dari 215

Wprowadzenie

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

17 kwietnia 2007 / Majówka z informatyką

Rafał Nowak Grafy


Wprowadzenie Graf
Najkrótsze ścieżki Ścieżka
Minimalne drzewa Cykl
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków Drzewo

O czym to będzie?

1 Grafy - wprowadzenie

2 Wyszukiwanie najkrótszych ścieżek z jednego źródła


Przeglądanie grafu wszerz
Algorytm Dijkstry

3 Minimalne drzewa spinające


Algorytm Prima-Dijkstry

4 Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków


Algorytm Floyda-Warshalla

Rafał Nowak Grafy


Wprowadzenie Graf
Najkrótsze ścieżki Ścieżka
Minimalne drzewa Cykl
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków Drzewo

Co to jest graf?

Definicja (nieformalna)
Graf to zbiór wierzchołków połączonych krawędziami

Rafał Nowak Grafy


Wprowadzenie Graf
Najkrótsze ścieżki Ścieżka
Minimalne drzewa Cykl
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków Drzewo

Co to jest graf?

Definicja (nieformalna)
Graf to zbiór wierzchołków połączonych krawędziami

Przykłady

Rafał Nowak Grafy


Wprowadzenie Graf
Najkrótsze ścieżki Ścieżka
Minimalne drzewa Cykl
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków Drzewo

Rafał Nowak Grafy


Wprowadzenie Graf
Najkrótsze ścieżki Ścieżka
Minimalne drzewa Cykl
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków Drzewo

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

Rafał Nowak Grafy


Wprowadzenie Graf
Najkrótsze ścieżki Ścieżka
Minimalne drzewa Cykl
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków Drzewo

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

Rafał Nowak Grafy


Wprowadzenie Graf
Najkrótsze ścieżki Ścieżka
Minimalne drzewa Cykl
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków Drzewo

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

Rafał Nowak Grafy


Wprowadzenie Graf
Najkrótsze ścieżki Ścieżka
Minimalne drzewa Cykl
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków Drzewo

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

Rafał Nowak Grafy


Wprowadzenie Graf
Najkrótsze ścieżki Ścieżka
Minimalne drzewa Cykl
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków Drzewo

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

Graf nie zawierający żadnego cyklu nazywamy acyklicznym.


1,2

Rafał Nowak Grafy


Wprowadzenie Graf
Najkrótsze ścieżki Ścieżka
Minimalne drzewa Cykl
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków Drzewo

Definicja
Drzewem nazywamy acykliczny graf spójny

Rafał Nowak Grafy


Wprowadzenie Graf
Najkrótsze ścieżki Ścieżka
Minimalne drzewa Cykl
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków Drzewo

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

O czym to będzie?

1 Grafy - wprowadzenie

2 Wyszukiwanie najkrótszych ścieżek z jednego źródła


Przeglądanie grafu wszerz
Algorytm Dijkstry

3 Minimalne drzewa spinające


Algorytm Prima-Dijkstry

4 Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków


Algorytm Floyda-Warshalla

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą 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.

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą 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)

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą 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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą 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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 1 (drzewo)

13

11 14

9
10

1
3
4 2
6
7

5
8
12

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 1 (drzewo)

INF

INF INF

INF
INF

INF
INF
INF INF
INF
INF

0
INF
INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 1 (drzewo)

4 4

4
3

2
2
3 1
4
3

0
4
4

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 1 (drzewo)

INF

INF INF

INF
INF

INF
INF
INF INF
INF
INF

0
INF
INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 1 (drzewo)

INF

INF INF

INF
INF

INF
INF
INF 1
INF
INF

0
INF
INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 1 (drzewo)

INF

INF INF

INF
INF

INF
INF
INF 1
INF
INF

0
INF
INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 1 (drzewo)

INF

INF INF

INF
INF

2
INF
INF 1
INF
INF

0
INF
INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 1 (drzewo)

INF

INF INF

INF
INF

2
2
INF 1
INF
INF

0
INF
INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 1 (drzewo)

INF

INF INF

INF
INF

2
2
INF 1
INF
INF

0
INF
INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 1 (drzewo)

INF

INF INF

INF
INF

2
2
INF 1
INF
3

0
INF
INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 1 (drzewo)

INF

INF INF

INF
3

2
2
INF 1
INF
3

0
INF
INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 1 (drzewo)

INF

INF INF

INF
3

2
2
INF 1
INF
3

0
INF
INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 1 (drzewo)

INF

INF INF

INF
3

2
2
3 1
INF
3

0
INF
INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 1 (drzewo)

INF

INF INF

INF
3

2
2
3 1
INF
3

0
INF
INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 1 (drzewo)

INF

INF INF

INF
3

2
2
3 1
4
3

0
4
4

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 1 (drzewo)

INF

INF INF

INF
3

2
2
3 1
4
3

0
4
4

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 1 (drzewo)

INF

4 4

4
3

2
2
3 1
4
3

0
4
4

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 1 (drzewo)

INF

4 4

4
3

2
2
3 1
4
3

0
4
4

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 1 (drzewo)

INF

4 4

4
3

2
2
3 1
4
3

0
4
4

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 1 (drzewo)

INF

4 4

4
3

2
2
3 1
4
3

0
4
4

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 1 (drzewo)

INF

4 4

4
3

2
2
3 1
4
3

0
4
4

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 1 (drzewo)

INF

4 4

4
3

2
2
3 1
4
3

0
4
4

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 1 (drzewo)

INF

4 4

4
3

2
2
3 1
4
3

0
4
4

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 1 (drzewo)

4 4

4
3

2
2
3 1
4
3

0
4
4

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 1 (drzewo)

4 4

4
3

2
2
3 1
4
3

0
4
4

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 1 (drzewo)

4 4

4
3

2
2
3 1
4
3

0
4
4

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 1 (drzewo)

4 4

4
3

2
2
3 1
4
3

0
4
4

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 2
INF INF

INF INF INF INF INF

INF INF INF

0 INF INF INF

INF INF INF

INF INF

INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 2
INF INF

INF 1 INF INF INF

INF INF INF

0 INF INF INF

INF INF INF

INF INF

INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 2
INF INF

INF 1 INF INF INF

1 INF INF

0 INF INF INF

INF INF INF

INF INF

INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 2
INF INF

INF 1 INF INF INF

1 1 INF

0 INF INF INF

INF INF INF

INF INF

INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 2
INF INF

INF 1 INF INF INF

1 1 INF

0 INF INF INF

INF INF INF

INF INF

INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 2
INF INF

INF 1 INF INF INF

1 1 2

0 INF INF INF

INF INF INF

INF INF

INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 2
INF INF

INF 1 INF INF INF

1 1 2

0 INF INF INF

INF 2 INF

INF INF

INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 2
INF INF

INF 1 INF INF INF

1 1 2

0 INF INF INF

INF 2 INF

INF INF

INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 2
INF INF

INF 1 INF INF INF

1 1 2

0 INF INF INF

2 2 INF

INF INF

INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 2
INF INF

INF 1 INF INF INF

1 1 2

0 INF INF INF

2 2 INF

INF INF

INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 2
2 INF

2 1 INF INF INF

1 1 2

0 2 2 2

2 2 INF

INF INF

INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 2
2 INF

2 1 INF INF INF

1 1 2

0 2 2 2

2 2 INF

INF INF

INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 2
2 INF

2 1 3 INF INF

1 1 2

0 2 2 2

2 2 INF

INF INF

INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 2
2 INF

2 1 3 INF INF

1 1 2

0 2 2 2

2 2 INF

INF INF

INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 2
2 INF

2 1 3 INF INF

1 1 2

0 2 2 2

2 2 INF

3 INF

INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 2
2 INF

2 1 3 INF INF

1 1 2

0 2 2 2

2 2 INF

3 INF

INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 2
2 INF

2 1 3 INF INF

1 1 2

0 2 2 2

2 2 INF

3 INF

INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 2
2 INF

2 1 3 INF INF

1 1 2

0 2 2 2

2 2 INF

3 INF

INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 2
2 INF

2 1 3 INF INF

1 1 2

0 2 2 2

2 2 INF

3 INF

INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 2
2 INF

2 1 3 INF INF

1 1 2

0 2 2 2

2 2 INF

3 INF

INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 2
2 INF

2 1 3 INF INF

1 1 2

0 2 2 2

2 2 INF

3 INF

INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 2
2 INF

2 1 3 INF INF

1 1 2

0 2 2 2

2 2 INF

3 INF

INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 2
2 4

2 1 3 INF INF

1 1 2

0 2 2 2

2 2 INF

3 INF

INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 2
2 4

2 1 3 INF INF

1 1 2

0 2 2 2

2 2 INF

3 INF

INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 2
2 4

2 1 3 INF INF

1 1 2

0 2 2 2

2 2 4

3 INF

INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 2
2 4

2 1 3 INF INF

1 1 2

0 2 2 2

2 2 4

3 INF

INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 2
2 4

2 1 3 5 5

1 1 2

0 2 2 2

2 2 4

3 INF

INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 2
2 4

2 1 3 5 5

1 1 2

0 2 2 2

2 2 4

3 INF

INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 2
2 4

2 1 3 5 5

1 1 2

0 2 2 2

2 2 4

3 5

INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 2
2 4

2 1 3 5 5

1 1 2

0 2 2 2

2 2 4

3 5

INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 2
2 4

2 1 3 5 5

1 1 2

0 2 2 2

2 2 4

3 5

INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 2
2 4

2 1 3 5 5

1 1 2

0 2 2 2

2 2 4

3 5

INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 2
2 4

2 1 3 5 5

1 1 2

0 2 2 2

2 2 4

3 5

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 2
2 4

2 1 3 5 5

1 1 2

0 2 2 2

2 2 4

3 5

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład 2
2 4

2 1 3 5 5

1 1 2

0 2 2 2

2 2 4

3 5

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przeglądanie Grafu Wszerz (ang. breadth first search)


BFS(G, s)
1: for all u ∈ V do
2: color[u] ← BIAŁY; dist[u] ← ∞; prev[u] ← NIL
3: end for
4: color[s] ← CZERWONY; dist[s] ← 0; Q.push(s)
5: while not Q.empty() do
6: u ← Q.f ront() {u to wierzchołek pierwszy w kolejce}
7: for all v ∈ Adj[u] do
8: if color[v] = BIAŁY then
9: color[v] ← CZERWONY
10: dist[v] ← dist[u] + 1; prev[v] ← u
11: Q.push(v) {wstaw v na koniec kolejki}
12: end if
13: end for
14: Q.pop(); color[u] ← SZARY {zabierz u z kolejki i pomaluj go na szaro}
15: end while

Złożoność: O(n + m), alg. Dijkstry

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Problem

Rozważmy teraz grafy ważone, tzn. niech dana będzie nieujemna


funkcja wagowa c : E → h0, ∞).

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Problem

Rozważmy teraz grafy ważone, tzn. niech dana będzie nieujemna


funkcja wagowa c : E → h0, ∞).
Długość ścieżki definiujemy jako sumę wag jej krawędzi

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Problem

Rozważmy teraz grafy ważone, tzn. niech dana będzie nieujemna


funkcja wagowa c : E → h0, ∞).
Długość ścieżki definiujemy jako sumę wag jej krawędzi

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Problem

Rozważmy teraz grafy ważone, tzn. niech dana będzie nieujemna


funkcja wagowa c : E → h0, ∞).
Długość ścieżki definiujemy jako sumę wag jej krawędzi

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Problem

Rozważmy teraz grafy ważone, tzn. niech dana będzie nieujemna


funkcja wagowa c : E → h0, ∞).
Długość ścieżki definiujemy jako sumę wag jej krawędzi

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

BFS – źle działa

1
INF INF

6
2

INF
INF

100 5

INF 0
100
100
INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

BFS – źle działa

1
INF INF

6
2

INF
5

100 5

INF 0
100
100
INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

BFS – źle działa

1
INF INF

6
2

INF
5

100 5

INF 0
100
100
100

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

BFS – źle działa

1
INF INF

6
2

INF
5

100 5

INF 0
100
100
100

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

BFS – źle działa

1
INF 11

2 6

INF
5

100 5

INF 0
100
100
100

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

BFS – źle działa

1
INF 11

2 6

INF
5

100 5

INF 0
100
100
100

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

BFS – źle działa

1
INF 11

2 6

INF
5

100 5

200 0
100
100
100

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

BFS – źle działa

1
INF 11

2 6

INF
5

100 5

200 0
100
100
100

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

BFS – źle działa

1
12 11

2 6

INF
5

100 5

200 0
100
100
100

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

BFS – źle działa

1
12 11

2 6

INF
5

100 5

200 0
100
100
100

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

BFS – źle działa

1
12 11

2 6

300
5

100 5

200 0
100
100
100

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

BFS – źle działa

1
12 11

2 6

300
5

100 5

200 0
100
100
100

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

BFS – źle działa

1
12 11

2 6

300
5

100 5

200 0
100
100
100

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

BFS – źle działa

1
12 11

2 6

300
5

100 5

200 0
100
100
100

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Algorytm BFS należy zmodyfikować tak, aby wybierał z kolejki


wierzchołki o najmniejszej odległości od źródła

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Algorytm BFS należy zmodyfikować tak, aby wybierał z kolejki


wierzchołki o najmniejszej odległości od źródła
Tak zmodyfikowany algorytm powinień poprawiać odległości nawet
czerwonym (czyli odwiedzonym wcześniej) wierzchołkom
W ten sposób, otrzymujemy algorytm Dijkstry

1
INF INF

6
2

INF INF

100 5

INF 0
100
100
INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Algorytm BFS należy zmodyfikować tak, aby wybierał z kolejki


wierzchołki o najmniejszej odległości od źródła
Tak zmodyfikowany algorytm powinień poprawiać odległości nawet
czerwonym (czyli odwiedzonym wcześniej) wierzchołkom
W ten sposób, otrzymujemy algorytm Dijkstry

1
INF INF

6
2

INF 5

100 5

INF 0
100
100
INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Algorytm BFS należy zmodyfikować tak, aby wybierał z kolejki


wierzchołki o najmniejszej odległości od źródła
Tak zmodyfikowany algorytm powinień poprawiać odległości nawet
czerwonym (czyli odwiedzonym wcześniej) wierzchołkom
W ten sposób, otrzymujemy algorytm Dijkstry

1
INF INF

6
2

INF 5

100 5

INF 0
100
100
100

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Algorytm BFS należy zmodyfikować tak, aby wybierał z kolejki


wierzchołki o najmniejszej odległości od źródła
Tak zmodyfikowany algorytm powinień poprawiać odległości nawet
czerwonym (czyli odwiedzonym wcześniej) wierzchołkom
W ten sposób, otrzymujemy algorytm Dijkstry

1
INF INF

6
2

INF 5

100 5

INF 0
100
100
100

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Algorytm BFS należy zmodyfikować tak, aby wybierał z kolejki


wierzchołki o najmniejszej odległości od źródła
Tak zmodyfikowany algorytm powinień poprawiać odległości nawet
czerwonym (czyli odwiedzonym wcześniej) wierzchołkom
W ten sposób, otrzymujemy algorytm Dijkstry

1
INF 11

2 6

INF 5

100 5

INF 0
100
100
100

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Algorytm BFS należy zmodyfikować tak, aby wybierał z kolejki


wierzchołki o najmniejszej odległości od źródła
Tak zmodyfikowany algorytm powinień poprawiać odległości nawet
czerwonym (czyli odwiedzonym wcześniej) wierzchołkom
W ten sposób, otrzymujemy algorytm Dijkstry

1
INF 11

2 6

INF 5

100 5

INF 0
100
100
100

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Algorytm BFS należy zmodyfikować tak, aby wybierał z kolejki


wierzchołki o najmniejszej odległości od źródła
Tak zmodyfikowany algorytm powinień poprawiać odległości nawet
czerwonym (czyli odwiedzonym wcześniej) wierzchołkom
W ten sposób, otrzymujemy algorytm Dijkstry

1
12 11

2 6

INF 5

100 5

INF 0
100
100
100

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Algorytm BFS należy zmodyfikować tak, aby wybierał z kolejki


wierzchołki o najmniejszej odległości od źródła
Tak zmodyfikowany algorytm powinień poprawiać odległości nawet
czerwonym (czyli odwiedzonym wcześniej) wierzchołkom
W ten sposób, otrzymujemy algorytm Dijkstry

1
12 11

2 6

INF 5

100 5

INF 0
100
100
100

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Algorytm BFS należy zmodyfikować tak, aby wybierał z kolejki


wierzchołki o najmniejszej odległości od źródła
Tak zmodyfikowany algorytm powinień poprawiać odległości nawet
czerwonym (czyli odwiedzonym wcześniej) wierzchołkom
W ten sposób, otrzymujemy algorytm Dijkstry

1
12 11

2 6

14 5

100 5

INF 0
100
100
100

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Algorytm BFS należy zmodyfikować tak, aby wybierał z kolejki


wierzchołki o najmniejszej odległości od źródła
Tak zmodyfikowany algorytm powinień poprawiać odległości nawet
czerwonym (czyli odwiedzonym wcześniej) wierzchołkom
W ten sposób, otrzymujemy algorytm Dijkstry

1
12 11

2 6

14 5

100 5

INF 0
100
100
100

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Algorytm BFS należy zmodyfikować tak, aby wybierał z kolejki


wierzchołki o najmniejszej odległości od źródła
Tak zmodyfikowany algorytm powinień poprawiać odległości nawet
czerwonym (czyli odwiedzonym wcześniej) wierzchołkom
W ten sposób, otrzymujemy algorytm Dijkstry

1
12 11

2 6

14 5

100 5

114 0
100
100
100

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Algorytm BFS należy zmodyfikować tak, aby wybierał z kolejki


wierzchołki o najmniejszej odległości od źródła
Tak zmodyfikowany algorytm powinień poprawiać odległości nawet
czerwonym (czyli odwiedzonym wcześniej) wierzchołkom
W ten sposób, otrzymujemy algorytm Dijkstry

1
12 11

2 6

14 5

100 5

114 0
100
100
100

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Algorytm BFS należy zmodyfikować tak, aby wybierał z kolejki


wierzchołki o najmniejszej odległości od źródła
Tak zmodyfikowany algorytm powinień poprawiać odległości nawet
czerwonym (czyli odwiedzonym wcześniej) wierzchołkom
W ten sposób, otrzymujemy algorytm Dijkstry

1
12 11

2 6

14 5

100 5

114 0
100
100
100

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Algorytm BFS należy zmodyfikować tak, aby wybierał z kolejki


wierzchołki o najmniejszej odległości od źródła
Tak zmodyfikowany algorytm powinień poprawiać odległości nawet
czerwonym (czyli odwiedzonym wcześniej) wierzchołkom
W ten sposób, otrzymujemy algorytm Dijkstry

1
12 11

2 6

14 5

100 5

114 0
100
100
100

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład
INF

15 2 10 1

0 INF 7 13 INF 80 INF INF

2 5 50 10

INF 10 INF INF INF 13

18 12 10 1 4 18

INF 10 INF

30 4 6

INF INF 6

20

INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład
INF

15 2 10 1

0 INF 7 13 INF 80 INF INF

2 5 50 10

2 10 INF INF INF 13

18 12 10 1 4 18

INF 10 INF

30 4 6

INF INF 6

20

INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład
15

15 2 10 1

0 INF 7 13 INF 80 INF INF

2 5 50 10

2 10 INF INF INF 13

18 12 10 1 4 18

INF 10 INF

30 4 6

INF INF 6

20

INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład
15

15 2 10 1

0 INF 7 13 INF 80 INF INF

2 5 50 10

2 10 INF INF INF 13

18 12 10 1 4 18

INF 10 INF

30 4 6

INF INF 6

20

INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład
15

15 2 10 1

0 INF 7 13 INF 80 INF INF

2 5 50 10

2 10 INF INF INF 13

18 12 10 1 4 18

20 10 INF

30 4 6

INF INF 6

20

INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład
15

15 2 10 1

0 INF 7 13 INF 80 INF INF

2 5 50 10

2 10 INF INF INF 13

18 12 10 1 4 18

20 10 INF

30 4 6

INF INF 6

20

INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład
15

15 2 10 1

0 INF 7 13 INF 80 25 INF

2 5 50 10

2 10 INF INF INF 13

18 12 10 1 4 18

20 10 INF

30 4 6

INF INF 6

20

INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład
15

15 2 10 1

0 INF 7 13 INF 80 25 INF

2 5 50 10

2 10 INF INF INF 13

18 12 10 1 4 18

20 10 INF

30 4 6

INF INF 6

20

33

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład
15

15 2 10 1

0 INF 7 13 INF 80 25 16

2 5 50 10

2 10 INF INF INF 13

18 12 10 1 4 18

20 10 INF

30 4 6

INF INF 6

20

33

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki BFS
Minimalne drzewa Dijkstra
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Algorytm Dijkstry znajduje pewne drzewo spinające

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Prim-Dijkstra
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

O czym to będzie?

1 Grafy - wprowadzenie

2 Wyszukiwanie najkrótszych ścieżek z jednego źródła


Przeglądanie grafu wszerz
Algorytm Dijkstry

3 Minimalne drzewa spinające


Algorytm Prima-Dijkstry

4 Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków


Algorytm Floyda-Warshalla

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

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

Algorytm Dijkstry nie znajduje minimalnego drzewa spinającego

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Prim-Dijkstra
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Algorytm Prima-Dijkstry znajduje minimalne drzewo spinające

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Prim-Dijkstra
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Algorytm Dijkstry należy zmodyfikować tak, aby


dist[v] = c (hprev[v], v))

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Prim-Dijkstra
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład
INF

15 2 10 1

0 INF 7 13 INF 80 INF INF

2 5 50 10

INF 10 INF INF INF 13

18 12 10 1 4 18

INF 10 INF

30 4 6

INF INF 6

20

INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Prim-Dijkstra
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład
INF

15 2 10 1

0 INF 7 13 INF 80 INF INF

2 5 50 10

2 10 INF INF INF 13

18 12 10 1 4 18

INF 10 INF

30 4 6

INF INF 6

20

INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Prim-Dijkstra
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład
15

15 2 10 1

0 INF 7 13 INF 80 INF INF

2 5 50 10

2 10 INF INF INF 13

18 12 10 1 4 18

INF 10 INF

30 4 6

INF INF 6

20

INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Prim-Dijkstra
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład
15

15 2 10 1

0 INF 7 13 INF 80 INF INF

2 5 50 10

2 10 INF INF INF 13

18 12 10 1 4 18

INF 10 INF

30 4 6

INF INF 6

20

INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Prim-Dijkstra
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład
15

15 2 10 1

0 INF 7 13 INF 80 INF INF

2 5 50 10

2 10 INF INF INF 13

18 12 10 1 4 18

18 10 INF

30 4 6

INF INF 6

20

INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Prim-Dijkstra
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład
15

15 2 10 1

0 INF 7 13 INF 80 INF INF

2 5 50 10

2 10 INF INF INF 13

18 12 10 1 4 18

18 10 INF

30 4 6

INF INF 6

20

INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Prim-Dijkstra
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład
15

15 2 10 1

0 INF 7 13 INF 80 10 INF

2 5 50 10

2 10 INF INF INF 13

18 12 10 1 4 18

18 10 INF

30 4 6

INF INF 6

20

INF

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Prim-Dijkstra
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład
15

15 2 10 1

0 INF 7 13 INF 80 10 INF

2 5 50 10

2 10 INF INF INF 13

18 12 10 1 4 18

18 10 INF

30 4 6

INF INF 6

20

18

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Prim-Dijkstra
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Przykład
15

15 2 10 1

0 INF 7 13 INF 80 10 1

2 5 50 10

2 10 INF INF INF 13

18 12 10 1 4 18

18 10 INF

30 4 6

INF INF 6

20

18

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Prim-Dijkstra
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Prim-Dijkstra
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Prim-Dijkstra
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Prim-Dijkstra
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Prim-Dijkstra
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Prim-Dijkstra
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Prim-Dijkstra
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Prim-Dijkstra
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Prim-Dijkstra
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Prim-Dijkstra
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Prim-Dijkstra
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Prim-Dijkstra
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Prim-Dijkstra
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Prim-Dijkstra
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Prim-Dijkstra
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Prim-Dijkstra
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Prim-Dijkstra
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Prim-Dijkstra
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Prim-Dijkstra
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Prim-Dijkstra
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Prim-Dijkstra
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Prim-Dijkstra
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Prim-Dijkstra
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Prim-Dijkstra
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Prim-Dijkstra
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Prim-Dijkstra
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Prim-Dijkstra
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Prim-Dijkstra
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Prim-Dijkstra
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Floyd-Warshall
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

O czym to będzie?

1 Grafy - wprowadzenie

2 Wyszukiwanie najkrótszych ścieżek z jednego źródła


Przeglądanie grafu wszerz
Algorytm Dijkstry

3 Minimalne drzewa spinające


Algorytm Prima-Dijkstry

4 Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków


Algorytm Floyda-Warshalla

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Floyd-Warshall
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Problem
Problem
Dane:
ważony graf (skierowany) G = hV, E, c : E → h0, ∞)i

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Floyd-Warshall
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Floyd-Warshall
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Floyd-Warshall
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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 }.

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Floyd-Warshall
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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.

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Floyd-Warshall
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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},

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Floyd-Warshall
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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,

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Floyd-Warshall
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

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,

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Floyd-Warshall
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Jak wyznaczyć D[u, v, k]?


Zależność rekurencyjna

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Floyd-Warshall
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Jak wyznaczyć D[u, v, k]?


Zależność rekurencyjna

k Są dwaj kandydaci na wartość D[u, v, k]:


D[u, v, k − 1] — ścieżka od u do v nie
u v
D[u,v,k-1]
wykorzystująca wierzchołka k

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Floyd-Warshall
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Jak wyznaczyć D[u, v, k]?


Zależność rekurencyjna

k Są dwaj kandydaci na wartość D[u, v, k]:


D[u, v, k − 1] — ścieżka od u do v nie
u v
D[u,v,k-1]
wykorzystująca wierzchołka k
D[u, k, k − 1] + D[k, v, k − 1] — ścieżka od u do k
k

plus ścieżka od k do v
D[u,k,k-1] D[k,v,k-1]

u v

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Floyd-Warshall
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Jak wyznaczyć D[u, v, k]?


Zależność rekurencyjna

k Są dwaj kandydaci na wartość D[u, v, k]:


D[u, v, k − 1] — ścieżka od u do v nie
u v
D[u,v,k-1]
wykorzystująca wierzchołka k
D[u, k, k − 1] + D[k, v, k − 1] — ścieżka od u do k
k

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.

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Floyd-Warshall
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Jak wyznaczyć D[u, v, k]?


Zależność rekurencyjna

k Są dwaj kandydaci na wartość D[u, v, k]:


D[u, v, k − 1] — ścieżka od u do v nie
u v
D[u,v,k-1]
wykorzystująca wierzchołka k
D[u, k, k − 1] + D[k, v, k − 1] — ścieżka od u do k
k

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] )

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Floyd-Warshall
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Floyd-Warshall(G = hV, E, ci)


1: for u = 1 to n do
2: for v = 1 to n 
do
0, gdy u = v,
3: D[u, v, 0] = c (hu, vi) , gdy hu, vi ∈ E,

∞, gdy hu, vi ∈
/ E,
4: end for
5: end for
6: for k = 1 to n do
7: for u = 1 to n do
8: for v = 1 to n do
9: D[u, v, k] ← min (D[u, v, k − 1], D[u, k, k − 1] + D[k, v, k − 1])
10: end for
11: end for
12: end for
Ensure: ∀u,v∈V d[u][v] = D[u, v, n]

Złożoność czasowa i pamięciowa: O(n3 )

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Floyd-Warshall
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Algorytm Floyda-Warshalla można zaimplementować używając


O(n2 ) pamięci

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Floyd-Warshall
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Algorytm Floyda-Warshalla można zaimplementować używając


O(n2 ) pamięci
Aby mieć wiadomość o ścieżce od u do v realizującej najkrótszą
odległość, wystarczy pamiętać π[u, v] będądy wierzchołkiem
pośrednim pomiędzy u i v.

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Floyd-Warshall
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Floyd-Warshall(G = hV, E, ci)


1: for u = 1 to n do
2: for v = 1 to n do
3: d[u, v] ← ∞; π[u, v] ← NIL
4: end for
5: d[u, u] ← 0
6: end for
7: for all hu, vi ∈ E do
8: d[u, v] ← c (hu, vi); π[u, v] ← u
9: end for
10: for k = 1 to n do
11: for u = 1 to n do
12: for v = 1 to n do
13: if d[u, v] > d[u, k] + d[k, v] then
14: d[u, v] ← d[u, k] + d[k, v]; π[u, v] ← π[k, v]
15: end if
16: end for
17: end for
18: end for

Złożoność czasowa: O(n3 ), Złożoność pamięciowa: O(n2 )

Rafał Nowak Grafy


Wprowadzenie
Najkrótsze ścieżki
Floyd-Warshall
Minimalne drzewa
Najkrótsze ścieżki pomiędzy dowolną parą wierzchołków

Dziękuję

Koniec

Rafał Nowak Grafy

Anda mungkin juga menyukai