Grafy c.d. --- cykl Eulera, algorytm Dijkstry i Bellmana ... · Grafy c.d. — cykl Eulera,...

Post on 28-Feb-2019

229 views 0 download

Transcript of Grafy c.d. --- cykl Eulera, algorytm Dijkstry i Bellmana ... · Grafy c.d. — cykl Eulera,...

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Grafy c.d. — cykl Eulera, algorytm Dijkstry iBellmana-Forda

zajecia 6.

Marcin Andrychowicz, Tomasz Kulczynski, BłazejOsinski

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Problem mostów królewieckich

Mosty Graf

1

2

3

4

Cykl EuleraCykl Eulera to cykl, który przechodzi przez wszystkiekrawedzie grafu dokładnie raz.

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Problem mostów królewieckich

Mosty Graf

1

2

3

4

Cykl EuleraCykl Eulera to cykl, który przechodzi przez wszystkiekrawedzie grafu dokładnie raz.

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Problem mostów królewieckich

Mosty Graf

1

2

3

4

Cykl EuleraCykl Eulera to cykl, który przechodzi przez wszystkiekrawedzie grafu dokładnie raz.

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Cykl Eulera

Przykład cyklu Eulera:

7

1 2

3 4

5

6

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Cykl Eulera

Przykład cyklu Eulera:

7

1 2

3 4

5

6

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Cykl Eulera

Przykład cyklu Eulera:

7

1 2

3 4

5

6

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Cykl Eulera

Przykład cyklu Eulera:

7

1 2

3 4

5

6

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Cykl Eulera

Przykład cyklu Eulera:

7

1 2

3 4

5

6

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Cykl Eulera

Przykład cyklu Eulera:

7

1 2

3 4

5

6

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Cykl Eulera

Przykład cyklu Eulera:

7

1 2

3 4

5

6

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Cykl Eulera

Przykład cyklu Eulera:

7

1 2

3 4

5

6

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Cykl Eulera

Przykład cyklu Eulera:

7

1 2

3 4

5

6

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Cykl Eulera

Przykład cyklu Eulera:

7

1 2

3 4

5

6

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Cykl Eulera

Pytaniaczy graf posiada cykl Eulera? (czy jest tzw.eulerowski)jak znalezc dowolny cykl Eulera?

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Cykl Eulera

Pytaniaczy graf posiada cykl Eulera? (czy jest tzw.eulerowski)jak znalezc dowolny cykl Eulera?

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Czy graf posiada cykl Euler?

GrafDlaczego ponizszy graf nie posiada cyklu Eulera?

1

2

3

4

Warunki konieczne:parzystosc stopni wierzchołkówspójnosc

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Czy graf posiada cykl Euler?

GrafDlaczego ponizszy graf nie posiada cyklu Eulera?

1

2

3

4

Warunki konieczne:parzystosc stopni wierzchołkówspójnosc

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Czy graf posiada cykl Euler?

GrafDlaczego ponizszy graf nie posiada cyklu Eulera?

1

2

3

4

Warunki konieczne:parzystosc stopni wierzchołkówspójnosc

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Czy graf posiada cykl Euler?

GrafDlaczego ponizszy graf nie posiada cyklu Eulera?

1

2

3

4

Warunki konieczne:parzystosc stopni wierzchołkówspójnosc

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Czy graf posiada cykl Eulera?

Podane warunki sa dostateczne!

dowód przez indukcje wzgledem ilosci krawedzibaza: dla grafu bez krawedzi zachodzikrok indukcyjny: zaczynamy z dowolnego wierzchołka vi poruszamy sie az trafimy znów do v . . .

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Czy graf posiada cykl Eulera?

Podane warunki sa dostateczne!

dowód przez indukcje wzgledem ilosci krawedzibaza: dla grafu bez krawedzi zachodzikrok indukcyjny: zaczynamy z dowolnego wierzchołka vi poruszamy sie az trafimy znów do v . . .

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Czy graf posiada cykl Eulera?

Podane warunki sa dostateczne!

dowód przez indukcje wzgledem ilosci krawedzibaza: dla grafu bez krawedzi zachodzikrok indukcyjny: zaczynamy z dowolnego wierzchołka vi poruszamy sie az trafimy znów do v . . .

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Dowód c.d.

Graf

7

1 2

3 4

5

6

Co dalej?

dlaczego trafilismy do v?w pozostałej czesci grafu cykl Eulera istnieje —(7,1,2,3,4,2,7)

łaczymy oba cykle — (7,5,4,6,7,1,2,3,4,2,7)

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Dowód c.d.

Graf

7

1 2

3 4

5

6

Co dalej?

dlaczego trafilismy do v?w pozostałej czesci grafu cykl Eulera istnieje —(7,1,2,3,4,2,7)

łaczymy oba cykle — (7,5,4,6,7,1,2,3,4,2,7)

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Dowód c.d.

Graf

7

1 2

3 4

5

6

Co dalej?

dlaczego trafilismy do v?w pozostałej czesci grafu cykl Eulera istnieje —(7,1,2,3,4,2,7)

łaczymy oba cykle — (7,5,4,6,7,1,2,3,4,2,7)

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Dowód c.d.

Graf

7

1 2

3 4

5

6

Co dalej?

dlaczego trafilismy do v?w pozostałej czesci grafu cykl Eulera istnieje —(7,1,2,3,4,2,7)

łaczymy oba cykle — (7,5,4,6,7,1,2,3,4,2,7)

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Dowód c.d.

Graf

7

1 2

3 4

5

6

Co dalej?

dlaczego trafilismy do v?w pozostałej czesci grafu cykl Eulera istnieje —(7,1,2,3,4,2,7)

łaczymy oba cykle — (7,5,4,6,7,1,2,3,4,2,7)

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Dowód c.d.

Graf

7

1 2

3 4

5

6

Co dalej?

dlaczego trafilismy do v?w pozostałej czesci grafu cykl Eulera istnieje —(7,1,2,3,4,2,7)

łaczymy oba cykle — (7,5,4,6,7,1,2,3,4,2,7)

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Dowód c.d.

Graf

7

1 2

3 4

5

6

Co dalej?

dlaczego trafilismy do v?w pozostałej czesci grafu cykl Eulera istnieje —(7,1,2,3,4,2,7)

łaczymy oba cykle — (7,5,4,6,7,1,2,3,4,2,7)

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Sciezka Eulera

Sciezka EuleraSciezka Eulera — sciezka przechodzaca przez kazdakrawedz dokładnie raz nie bedaca cyklemgraf musi byc spójnyniech p i k beda poczatkiem i koncem sciezki Eulerapo dodaniu krawedzi łaczacej p i k otrzymujemy grafeulerowskizatem w grafie musza istniec dokładnie dwa wierzchołkinieparzystego stopnia

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Sciezka Eulera

Sciezka EuleraSciezka Eulera — sciezka przechodzaca przez kazdakrawedz dokładnie raz nie bedaca cyklemgraf musi byc spójnyniech p i k beda poczatkiem i koncem sciezki Eulerapo dodaniu krawedzi łaczacej p i k otrzymujemy grafeulerowskizatem w grafie musza istniec dokładnie dwa wierzchołkinieparzystego stopnia

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Sciezka Eulera

Sciezka EuleraSciezka Eulera — sciezka przechodzaca przez kazdakrawedz dokładnie raz nie bedaca cyklemgraf musi byc spójnyniech p i k beda poczatkiem i koncem sciezki Eulerapo dodaniu krawedzi łaczacej p i k otrzymujemy grafeulerowskizatem w grafie musza istniec dokładnie dwa wierzchołkinieparzystego stopnia

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Sciezka Eulera

Sciezka EuleraSciezka Eulera — sciezka przechodzaca przez kazdakrawedz dokładnie raz nie bedaca cyklemgraf musi byc spójnyniech p i k beda poczatkiem i koncem sciezki Eulerapo dodaniu krawedzi łaczacej p i k otrzymujemy grafeulerowskizatem w grafie musza istniec dokładnie dwa wierzchołkinieparzystego stopnia

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Sciezka Eulera

Sciezka EuleraSciezka Eulera — sciezka przechodzaca przez kazdakrawedz dokładnie raz nie bedaca cyklemgraf musi byc spójnyniech p i k beda poczatkiem i koncem sciezki Eulerapo dodaniu krawedzi łaczacej p i k otrzymujemy grafeulerowskizatem w grafie musza istniec dokładnie dwa wierzchołkinieparzystego stopnia

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Cykl Eulera w grafach skierowanych

Warunki konieczne:z wierzchołka nr. 1 da sie dojsc do kazdego innegodo kazdego wierzchołka wchodzi tyle samo krawedzi ilez niego wychodzipowyzsze warunki sa dostateczne

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Cykl Eulera w grafach skierowanych

Warunki konieczne:z wierzchołka nr. 1 da sie dojsc do kazdego innegodo kazdego wierzchołka wchodzi tyle samo krawedzi ilez niego wychodzipowyzsze warunki sa dostateczne

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Cykl Eulera w grafach skierowanych

Warunki konieczne:z wierzchołka nr. 1 da sie dojsc do kazdego innegodo kazdego wierzchołka wchodzi tyle samo krawedzi ilez niego wychodzipowyzsze warunki sa dostateczne

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Wyznaczanie cyklu Eulera

Wyznaczanie cyklu Eulera

umiemy juz sprawdzic czy cykl Eulera istnieje, ale jakgo znalezc?słuzy do tego algorytm Fleury’ego, który działatroche na zasadzie opisanego dowodudziała zarówno dla grafów skierowanych jak inieskierowanychjest rekurencyjnyzaczynamy od dowolnego wierzchołka

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Wyznaczanie cyklu Eulera

Wyznaczanie cyklu Eulera

umiemy juz sprawdzic czy cykl Eulera istnieje, ale jakgo znalezc?słuzy do tego algorytm Fleury’ego, który działatroche na zasadzie opisanego dowodudziała zarówno dla grafów skierowanych jak inieskierowanychjest rekurencyjnyzaczynamy od dowolnego wierzchołka

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Wyznaczanie cyklu Eulera

Wyznaczanie cyklu Eulera

umiemy juz sprawdzic czy cykl Eulera istnieje, ale jakgo znalezc?słuzy do tego algorytm Fleury’ego, który działatroche na zasadzie opisanego dowodudziała zarówno dla grafów skierowanych jak inieskierowanychjest rekurencyjnyzaczynamy od dowolnego wierzchołka

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Wyznaczanie cyklu Eulera

Wyznaczanie cyklu Eulera

umiemy juz sprawdzic czy cykl Eulera istnieje, ale jakgo znalezc?słuzy do tego algorytm Fleury’ego, który działatroche na zasadzie opisanego dowodudziała zarówno dla grafów skierowanych jak inieskierowanychjest rekurencyjnyzaczynamy od dowolnego wierzchołka

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Wyznaczanie cyklu Eulera

Wyznaczanie cyklu Eulera

umiemy juz sprawdzic czy cykl Eulera istnieje, ale jakgo znalezc?słuzy do tego algorytm Fleury’ego, który działatroche na zasadzie opisanego dowodudziała zarówno dla grafów skierowanych jak inieskierowanychjest rekurencyjnyzaczynamy od dowolnego wierzchołka

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Fleury’ego

Aby przetworzyc wierzchołek v :dopóki istnieje krawedz z v :

usun ta krawedz i przetwórz wierzchołek do któregoprowadziławypisz v

wypisane wierzchołki czytane w odwrotnej kolejnoscitworza cykl Eulera (pierwszy wierzchołek nie jestpowtórzony na koncu)dlaczego to działa? popatrzmy na przykład

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Fleury’ego

Aby przetworzyc wierzchołek v :dopóki istnieje krawedz z v :

usun ta krawedz i przetwórz wierzchołek do któregoprowadziławypisz v

wypisane wierzchołki czytane w odwrotnej kolejnoscitworza cykl Eulera (pierwszy wierzchołek nie jestpowtórzony na koncu)dlaczego to działa? popatrzmy na przykład

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Fleury’ego

Aby przetworzyc wierzchołek v :dopóki istnieje krawedz z v :

usun ta krawedz i przetwórz wierzchołek do któregoprowadziławypisz v

wypisane wierzchołki czytane w odwrotnej kolejnoscitworza cykl Eulera (pierwszy wierzchołek nie jestpowtórzony na koncu)dlaczego to działa? popatrzmy na przykład

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Fleury’ego

Aby przetworzyc wierzchołek v :dopóki istnieje krawedz z v :

usun ta krawedz i przetwórz wierzchołek do któregoprowadziławypisz v

wypisane wierzchołki czytane w odwrotnej kolejnoscitworza cykl Eulera (pierwszy wierzchołek nie jestpowtórzony na koncu)dlaczego to działa? popatrzmy na przykład

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Fleury’ego

Aby przetworzyc wierzchołek v :dopóki istnieje krawedz z v :

usun ta krawedz i przetwórz wierzchołek do któregoprowadziławypisz v

wypisane wierzchołki czytane w odwrotnej kolejnoscitworza cykl Eulera (pierwszy wierzchołek nie jestpowtórzony na koncu)dlaczego to działa? popatrzmy na przykład

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Fleury’ego

Aby przetworzyc wierzchołek v :dopóki istnieje krawedz z v :

usun ta krawedz i przetwórz wierzchołek do któregoprowadziławypisz v

wypisane wierzchołki czytane w odwrotnej kolejnoscitworza cykl Eulera (pierwszy wierzchołek nie jestpowtórzony na koncu)dlaczego to działa? popatrzmy na przykład

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Fleury’ego

7

1 2

3 4

5

6

Wyjscie7 2 4 3 2 1 7 6 4 5

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Fleury’ego

7

1 2

3 4

5

6

Wyjscie7 2 4 3 2 1 7 6 4 5

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Fleury’ego

7

1 2

3 4

5

6

Wyjscie7 2 4 3 2 1 7 6 4 5

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Fleury’ego

7

1 2

3 4

5

6

Wyjscie7 2 4 3 2 1 7 6 4 5

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Fleury’ego

7

1 2

3 4

5

6

Wyjscie7 2 4 3 2 1 7 6 4 5

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Fleury’ego

7

1 2

3 4

5

6

Wyjscie7 2 4 3 2 1 7 6 4 5

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Fleury’ego

7

1 2

3 4

5

6

Wyjscie7 2 4 3 2 1 7 6 4 5

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Fleury’ego

7

1 2

3 4

5

6

Wyjscie7 2 4 3 2 1 7 6 4 5

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Fleury’ego

7

1 2

3 4

5

6

Wyjscie7 2 4 3 2 1 7 6 4 5

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Fleury’ego

7

1 2

3 4

5

6

Wyjscie7 2 4 3 2 1 7 6 4 5

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Fleury’ego

7

1 2

3 4

5

6

Wyjscie7 2 4 3 2 1 7 6 4 5

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Fleury’ego

7

1 2

3 4

5

6

Wyjscie7 2 4 3 2 1 7 6 4 5

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Fleury’ego

7

1 2

3 4

5

6

Wyjscie7 2 4 3 2 1 7 6 4 5

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Fleury’ego

7

1 2

3 4

5

6

Wyjscie7 2 4 3 2 1 7 6 4 5

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Fleury’ego

7

1 2

3 4

5

6

Wyjscie7 2 4 3 2 1 7 6 4 5

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Fleury’ego

7

1 2

3 4

5

6

Wyjscie7 2 4 3 2 1 7 6 4 5

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Fleury’ego

7

1 2

3 4

5

6

Wyjscie7 2 4 3 2 1 7 6 4 5

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Fleury’ego

7

1 2

3 4

5

6

Wyjscie7 2 4 3 2 1 7 6 4 5

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Fleury’ego

7

1 2

3 4

5

6

Wyjscie7 2 4 3 2 1 7 6 4 5

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Fleury’ego

7

1 2

3 4

5

6

Wyjscie7 2 4 3 2 1 7 6 4 5

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Fleury’ego

7

1 2

3 4

5

6

Wyjscie7 2 4 3 2 1 7 6 4 5

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Fleury’ego

Usuwanie krawedzidla macierzy sasiedztwa — łatwedla list sasiedztwa:

dla grafów skierowanych — metoda pop_back()dla grafów nieskierowanych — a co z krawedzia "wdruga strone"?problem ten pominiemy do czasu az poznamy klaseset

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Fleury’ego

Usuwanie krawedzidla macierzy sasiedztwa — łatwedla list sasiedztwa:

dla grafów skierowanych — metoda pop_back()dla grafów nieskierowanych — a co z krawedzia "wdruga strone"?problem ten pominiemy do czasu az poznamy klaseset

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Fleury’ego

Usuwanie krawedzidla macierzy sasiedztwa — łatwedla list sasiedztwa:

dla grafów skierowanych — metoda pop_back()dla grafów nieskierowanych — a co z krawedzia "wdruga strone"?problem ten pominiemy do czasu az poznamy klaseset

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Fleury’ego

Usuwanie krawedzidla macierzy sasiedztwa — łatwedla list sasiedztwa:

dla grafów skierowanych — metoda pop_back()dla grafów nieskierowanych — a co z krawedzia "wdruga strone"?problem ten pominiemy do czasu az poznamy klaseset

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Fleury’ego

Usuwanie krawedzidla macierzy sasiedztwa — łatwedla list sasiedztwa:

dla grafów skierowanych — metoda pop_back()dla grafów nieskierowanych — a co z krawedzia "wdruga strone"?problem ten pominiemy do czasu az poznamy klaseset

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Implementacja

ImplementacjaImplementacja algorytmu Fleury’ego znajduje sie wnotatkach.

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Fleury’ego

Analiza złozonosci — lista sasiedztwa:Po kazdej krawedzi przechodzimy dokładnie raz —złozonosc O(|E |).

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Grafy wazone

Grafy wazonegrafem wazonym lub inaczej siecia nazywamy graf,którego krawedzie posiadaja w pewnym sensie"długosci"przykład grafu wazonego:

6

1

23

4

5

41

51

50

36

38

45

29

21

32

32

29

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Grafy wazone

Grafy wazonegrafem wazonym lub inaczej siecia nazywamy graf,którego krawedzie posiadaja w pewnym sensie"długosci"przykład grafu wazonego:

6

1

23

4

5

41

51

50

36

38

45

29

21

32

32

29

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Grafy wazone

Grafy wazone

owe liczby bedziemy nazywac waga, długoscia albokosztem krawedzidługosc sciezki to suma długosci jej krawedzi

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Grafy wazone

Grafy wazone

owe liczby bedziemy nazywac waga, długoscia albokosztem krawedzidługosc sciezki to suma długosci jej krawedzi

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Najkrótsze sciezki

Pytania

jaka jest najkrótsza sciezka z wierzchołka v do w?jakie sa najkrótsze sciezki z wierzchołka v dowszystkich pozostałych wierzchołków?jakie sa najkrótsze sciezki pomiedzy wszystkimi paramiwierzchołków?

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Najkrótsze sciezki

Pytania

jaka jest najkrótsza sciezka z wierzchołka v do w?jakie sa najkrótsze sciezki z wierzchołka v dowszystkich pozostałych wierzchołków?jakie sa najkrótsze sciezki pomiedzy wszystkimi paramiwierzchołków?

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Najkrótsze sciezki

Pytania

jaka jest najkrótsza sciezka z wierzchołka v do w?jakie sa najkrótsze sciezki z wierzchołka v dowszystkich pozostałych wierzchołków?jakie sa najkrótsze sciezki pomiedzy wszystkimi paramiwierzchołków?

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Najkrótsze sciezki

Najkrótsze sciezki

zazwyczaj nie da sie policzyc najkrótszej sciezki z v dow bez liczenia najkrótszych sciezek z v do wszystkichpozostałych wierzchołkówdlatego tez skupimy sie na liczeniu wszystkichnajkrótszych sciezek z pojedynczego zródła (oznaczmyje s)

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Najkrótsze sciezki

Najkrótsze sciezki

zazwyczaj nie da sie policzyc najkrótszej sciezki z v dow bez liczenia najkrótszych sciezek z v do wszystkichpozostałych wierzchołkówdlatego tez skupimy sie na liczeniu wszystkichnajkrótszych sciezek z pojedynczego zródła (oznaczmyje s)

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Najkrótsze sciezki

Zarys metody postepowania

w kazdej chwili obliczen bedziemy trzymali pewnesciezki z s do pozostałych wierzchołkówkonkretniej bedziemy trzymali 2 tablice:

dis[v ] — długosc najkrótszej znalezionej sciezki z s dovojc[v ] — ostatni nie liczac v wierzchołek na najkrótszejsciezce z s do v

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Najkrótsze sciezki

Zarys metody postepowania

w kazdej chwili obliczen bedziemy trzymali pewnesciezki z s do pozostałych wierzchołkówkonkretniej bedziemy trzymali 2 tablice:

dis[v ] — długosc najkrótszej znalezionej sciezki z s dovojc[v ] — ostatni nie liczac v wierzchołek na najkrótszejsciezce z s do v

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Najkrótsze sciezki

Zarys metody postepowania

w kazdej chwili obliczen bedziemy trzymali pewnesciezki z s do pozostałych wierzchołkówkonkretniej bedziemy trzymali 2 tablice:

dis[v ] — długosc najkrótszej znalezionej sciezki z s dovojc[v ] — ostatni nie liczac v wierzchołek na najkrótszejsciezce z s do v

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Najkrótsze sciezki

Zarys metody postepowania

w kazdej chwili obliczen bedziemy trzymali pewnesciezki z s do pozostałych wierzchołkówkonkretniej bedziemy trzymali 2 tablice:

dis[v ] — długosc najkrótszej znalezionej sciezki z s dovojc[v ] — ostatni nie liczac v wierzchołek na najkrótszejsciezce z s do v

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Sytuacja w trakcie obliczen

Graf6

1

23

4

5

41

51

50

36

38

45

29

21

32

32

29

Tablice

v 1 2 3 4 5 6dis[v ] 41 ∞ ∞ 73 29 0ojc[v ] 6 x x 1 6 x

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Relaksacja krawedzi

Relaksacja krawedzipodstawowa operacja w rozwazanych algorytmachbedzie relaksacja krawedzirelaksacja krawedzi v → w polega na sprawdzeniu, czyprzejscie najkrótsza znana sciezka z s do v anastepnie krawedzia z v do w nie daje krótszej sciezkiz s do w niz obecnie znanaif dis[v]+waga(v,w) < dis[w]

dis[w]=dis[v]+waga(v,w)ojc[w]=v

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Relaksacja krawedzi

Relaksacja krawedzipodstawowa operacja w rozwazanych algorytmachbedzie relaksacja krawedzirelaksacja krawedzi v → w polega na sprawdzeniu, czyprzejscie najkrótsza znana sciezka z s do v anastepnie krawedzia z v do w nie daje krótszej sciezkiz s do w niz obecnie znanaif dis[v]+waga(v,w) < dis[w]

dis[w]=dis[v]+waga(v,w)ojc[w]=v

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Relaksacja krawedzi

Relaksacja krawedzipodstawowa operacja w rozwazanych algorytmachbedzie relaksacja krawedzirelaksacja krawedzi v → w polega na sprawdzeniu, czyprzejscie najkrótsza znana sciezka z s do v anastepnie krawedzia z v do w nie daje krótszej sciezkiz s do w niz obecnie znanaif dis[v]+waga(v,w) < dis[w]

dis[w]=dis[v]+waga(v,w)ojc[w]=v

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Relaksacja krawedzi

Relaksacja krawedzipodstawowa operacja w rozwazanych algorytmachbedzie relaksacja krawedzirelaksacja krawedzi v → w polega na sprawdzeniu, czyprzejscie najkrótsza znana sciezka z s do v anastepnie krawedzia z v do w nie daje krótszej sciezkiz s do w niz obecnie znanaif dis[v]+waga(v,w) < dis[w]

dis[w]=dis[v]+waga(v,w)ojc[w]=v

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Relaksacja krawedzi

Relaksacja krawedzipodstawowa operacja w rozwazanych algorytmachbedzie relaksacja krawedzirelaksacja krawedzi v → w polega na sprawdzeniu, czyprzejscie najkrótsza znana sciezka z s do v anastepnie krawedzia z v do w nie daje krótszej sciezkiz s do w niz obecnie znanaif dis[v]+waga(v,w) < dis[w]

dis[w]=dis[v]+waga(v,w)ojc[w]=v

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Dijkstry

Algorytm Dijkstrypokazemy teraz najbardziej znany algorytm liczenianajkrótszych sciezek z pojedynczego zródła —algorytm Dijkstry

algorytm ten Działa tylko dla grafów o nieujemnychwagach krawedzijest to załozenie czesto spełnione, np. kiedy wagiodpowiadaja odległosciom

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Dijkstry

Algorytm Dijkstrypokazemy teraz najbardziej znany algorytm liczenianajkrótszych sciezek z pojedynczego zródła —algorytm Dijkstry

algorytm ten Działa tylko dla grafów o nieujemnychwagach krawedzijest to załozenie czesto spełnione, np. kiedy wagiodpowiadaja odległosciom

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Dijkstry

Algorytm Dijkstrypokazemy teraz najbardziej znany algorytm liczenianajkrótszych sciezek z pojedynczego zródła —algorytm Dijkstry

algorytm ten Działa tylko dla grafów o nieujemnychwagach krawedzijest to załozenie czesto spełnione, np. kiedy wagiodpowiadaja odległosciom

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Dijkstry

Algorytm Dijkstryoznacz wszystkie wierzchołki jako nieodwiedzone(vis[v ] = false)dla kazdego v ∈ V ustaw dis[v ] =∞ustaw dis[s] = 0dopóki istnieje nieodwiedzony wierzchołek oskonczonej odległosci:

niech v bedzie wierzchołkiem nieodwiedzonym onajmniejszej odległoscioznacz v jako odwiedzonyzrelaksuj wszystkie krawedzie wychodzace z v

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Dijkstry

Algorytm Dijkstryoznacz wszystkie wierzchołki jako nieodwiedzone(vis[v ] = false)dla kazdego v ∈ V ustaw dis[v ] =∞ustaw dis[s] = 0dopóki istnieje nieodwiedzony wierzchołek oskonczonej odległosci:

niech v bedzie wierzchołkiem nieodwiedzonym onajmniejszej odległoscioznacz v jako odwiedzonyzrelaksuj wszystkie krawedzie wychodzace z v

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Dijkstry

Algorytm Dijkstryoznacz wszystkie wierzchołki jako nieodwiedzone(vis[v ] = false)dla kazdego v ∈ V ustaw dis[v ] =∞ustaw dis[s] = 0dopóki istnieje nieodwiedzony wierzchołek oskonczonej odległosci:

niech v bedzie wierzchołkiem nieodwiedzonym onajmniejszej odległoscioznacz v jako odwiedzonyzrelaksuj wszystkie krawedzie wychodzace z v

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Dijkstry

Algorytm Dijkstryoznacz wszystkie wierzchołki jako nieodwiedzone(vis[v ] = false)dla kazdego v ∈ V ustaw dis[v ] =∞ustaw dis[s] = 0dopóki istnieje nieodwiedzony wierzchołek oskonczonej odległosci:

niech v bedzie wierzchołkiem nieodwiedzonym onajmniejszej odległoscioznacz v jako odwiedzonyzrelaksuj wszystkie krawedzie wychodzace z v

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Dijkstry

Algorytm Dijkstryoznacz wszystkie wierzchołki jako nieodwiedzone(vis[v ] = false)dla kazdego v ∈ V ustaw dis[v ] =∞ustaw dis[s] = 0dopóki istnieje nieodwiedzony wierzchołek oskonczonej odległosci:

niech v bedzie wierzchołkiem nieodwiedzonym onajmniejszej odległoscioznacz v jako odwiedzonyzrelaksuj wszystkie krawedzie wychodzace z v

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Dijkstry

Algorytm Dijkstryoznacz wszystkie wierzchołki jako nieodwiedzone(vis[v ] = false)dla kazdego v ∈ V ustaw dis[v ] =∞ustaw dis[s] = 0dopóki istnieje nieodwiedzony wierzchołek oskonczonej odległosci:

niech v bedzie wierzchołkiem nieodwiedzonym onajmniejszej odległoscioznacz v jako odwiedzonyzrelaksuj wszystkie krawedzie wychodzace z v

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Dijkstry

Algorytm Dijkstryoznacz wszystkie wierzchołki jako nieodwiedzone(vis[v ] = false)dla kazdego v ∈ V ustaw dis[v ] =∞ustaw dis[s] = 0dopóki istnieje nieodwiedzony wierzchołek oskonczonej odległosci:

niech v bedzie wierzchołkiem nieodwiedzonym onajmniejszej odległoscioznacz v jako odwiedzonyzrelaksuj wszystkie krawedzie wychodzace z v

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Dijkstry

Graf6

1

23

4

5

41

51

50

36

38

45

29

21

32

32

29

Tablice

v 1 2 3 4 5 6dis[v ] ∞ ∞ ∞ ∞ ∞ 0ojc[v ] x x x x x xvis[v ] 0 0 0 0 0 0

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Dijkstry

Graf6

1

23

4

5

41

51

50

36

38

45

29

21

32

32

29

Tablice

v 1 2 3 4 5 6dis[v ] 41 ∞ ∞ ∞ 29 0ojc[v ] 6 x x x 6 xvis[v ] 0 0 0 0 1 0

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Dijkstry

Graf6

1

23

4

5

41

51

50

36

38

45

29

21

32

32

29

Tablice

v 1 2 3 4 5 6dis[v ] 41 ∞ ∞ 50 29 0ojc[v ] 6 x x 5 6 xvis[v ] 0 0 0 0 1 1

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Dijkstry

Graf6

1

23

4

5

41

51

50

36

38

45

29

21

32

32

29

Tablice

v 1 2 3 4 5 6dis[v ] 41 92 ∞ 50 29 0ojc[v ] 6 1 x 5 6 xvis[v ] 1 0 0 0 1 1

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Dijkstry

Graf6

1

23

4

5

41

51

50

36

38

45

29

21

32

32

29

Tablice

v 1 2 3 4 5 6dis[v ] 41 82 86 50 29 0ojc[v ] 6 4 4 5 6 xvis[v ] 1 0 0 1 1 1

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Dijkstry

Graf6

1

23

4

5

41

51

50

36

38

45

29

21

32

32

29

Tablice

v 1 2 3 4 5 6dis[v ] 41 82 86 50 29 0ojc[v ] 6 4 4 5 6 xvis[v ] 1 1 0 1 1 1

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Dijkstry

Graf6

1

23

4

5

41

51

50

36

38

45

29

21

32

32

29

Tablice

v 1 2 3 4 5 6dis[v ] 41 82 86 50 29 0ojc[v ] 6 4 4 5 6 xvis[v ] 1 1 1 1 1 1

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Dijkstry

Analiza złozonosci — listy sasiedztwa:

złozonosc pamieciowa O(|V |+ |E |)kazda krawedz relaksujemy co najwyzej raz — czasO(|E |)O(|V |) razy wybieramy wierzchołek o najmniejszejodległosci, co zajmuje jednorazowo czas O(|V |), czyliłacznie O(|V |2)złozonosc czasowa O(|V |2 + |E |) = O(|V |2)da sie ta złozonosc poprawic, ale o tym bedzie kiedyindziej . . .

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Dijkstry

Analiza złozonosci — listy sasiedztwa:

złozonosc pamieciowa O(|V |+ |E |)kazda krawedz relaksujemy co najwyzej raz — czasO(|E |)O(|V |) razy wybieramy wierzchołek o najmniejszejodległosci, co zajmuje jednorazowo czas O(|V |), czyliłacznie O(|V |2)złozonosc czasowa O(|V |2 + |E |) = O(|V |2)da sie ta złozonosc poprawic, ale o tym bedzie kiedyindziej . . .

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Dijkstry

Analiza złozonosci — listy sasiedztwa:

złozonosc pamieciowa O(|V |+ |E |)kazda krawedz relaksujemy co najwyzej raz — czasO(|E |)O(|V |) razy wybieramy wierzchołek o najmniejszejodległosci, co zajmuje jednorazowo czas O(|V |), czyliłacznie O(|V |2)złozonosc czasowa O(|V |2 + |E |) = O(|V |2)da sie ta złozonosc poprawic, ale o tym bedzie kiedyindziej . . .

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Dijkstry

Analiza złozonosci — listy sasiedztwa:

złozonosc pamieciowa O(|V |+ |E |)kazda krawedz relaksujemy co najwyzej raz — czasO(|E |)O(|V |) razy wybieramy wierzchołek o najmniejszejodległosci, co zajmuje jednorazowo czas O(|V |), czyliłacznie O(|V |2)złozonosc czasowa O(|V |2 + |E |) = O(|V |2)da sie ta złozonosc poprawic, ale o tym bedzie kiedyindziej . . .

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Dijkstry

Analiza złozonosci — listy sasiedztwa:

złozonosc pamieciowa O(|V |+ |E |)kazda krawedz relaksujemy co najwyzej raz — czasO(|E |)O(|V |) razy wybieramy wierzchołek o najmniejszejodległosci, co zajmuje jednorazowo czas O(|V |), czyliłacznie O(|V |2)złozonosc czasowa O(|V |2 + |E |) = O(|V |2)da sie ta złozonosc poprawic, ale o tym bedzie kiedyindziej . . .

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Dijkstry

Dlaczego to działa?

po rozpatrzeniu v wartosc dis[v ] juz sie nie zmieni, borozpatrujemy wierzchołki coraz bardziej odległe od sudowodnimy, ze w momencie odwiedzania v najkrótszasciezka z s do v ma długosc dis[v ]:

dowód przez indukcje "w czasie"baza — w momencie wejscia do s zachodzi dis[s] = 0krok indukcyjny — załózmy, ze odwiedzamy v :najkrótsza sciezka do v musi biec tylko przez juzodwiedzone wierzchołki, bo v ma najnizsza wartosc wtablicy dis sposród nieodwiedzonych wierzchołkówjest wiec ona postaci (s, x1, . . . , xn, v) dla odwiedzonychxirozwazylismy ja relaksujac krawedz xn → v

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Dijkstry

Dlaczego to działa?

po rozpatrzeniu v wartosc dis[v ] juz sie nie zmieni, borozpatrujemy wierzchołki coraz bardziej odległe od sudowodnimy, ze w momencie odwiedzania v najkrótszasciezka z s do v ma długosc dis[v ]:

dowód przez indukcje "w czasie"baza — w momencie wejscia do s zachodzi dis[s] = 0krok indukcyjny — załózmy, ze odwiedzamy v :najkrótsza sciezka do v musi biec tylko przez juzodwiedzone wierzchołki, bo v ma najnizsza wartosc wtablicy dis sposród nieodwiedzonych wierzchołkówjest wiec ona postaci (s, x1, . . . , xn, v) dla odwiedzonychxirozwazylismy ja relaksujac krawedz xn → v

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Dijkstry

Dlaczego to działa?

po rozpatrzeniu v wartosc dis[v ] juz sie nie zmieni, borozpatrujemy wierzchołki coraz bardziej odległe od sudowodnimy, ze w momencie odwiedzania v najkrótszasciezka z s do v ma długosc dis[v ]:

dowód przez indukcje "w czasie"baza — w momencie wejscia do s zachodzi dis[s] = 0krok indukcyjny — załózmy, ze odwiedzamy v :najkrótsza sciezka do v musi biec tylko przez juzodwiedzone wierzchołki, bo v ma najnizsza wartosc wtablicy dis sposród nieodwiedzonych wierzchołkówjest wiec ona postaci (s, x1, . . . , xn, v) dla odwiedzonychxirozwazylismy ja relaksujac krawedz xn → v

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Dijkstry

Dlaczego to działa?

po rozpatrzeniu v wartosc dis[v ] juz sie nie zmieni, borozpatrujemy wierzchołki coraz bardziej odległe od sudowodnimy, ze w momencie odwiedzania v najkrótszasciezka z s do v ma długosc dis[v ]:

dowód przez indukcje "w czasie"baza — w momencie wejscia do s zachodzi dis[s] = 0krok indukcyjny — załózmy, ze odwiedzamy v :najkrótsza sciezka do v musi biec tylko przez juzodwiedzone wierzchołki, bo v ma najnizsza wartosc wtablicy dis sposród nieodwiedzonych wierzchołkówjest wiec ona postaci (s, x1, . . . , xn, v) dla odwiedzonychxirozwazylismy ja relaksujac krawedz xn → v

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Dijkstry

Dlaczego to działa?

po rozpatrzeniu v wartosc dis[v ] juz sie nie zmieni, borozpatrujemy wierzchołki coraz bardziej odległe od sudowodnimy, ze w momencie odwiedzania v najkrótszasciezka z s do v ma długosc dis[v ]:

dowód przez indukcje "w czasie"baza — w momencie wejscia do s zachodzi dis[s] = 0krok indukcyjny — załózmy, ze odwiedzamy v :najkrótsza sciezka do v musi biec tylko przez juzodwiedzone wierzchołki, bo v ma najnizsza wartosc wtablicy dis sposród nieodwiedzonych wierzchołkówjest wiec ona postaci (s, x1, . . . , xn, v) dla odwiedzonychxirozwazylismy ja relaksujac krawedz xn → v

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Dijkstry

Dlaczego to działa?

po rozpatrzeniu v wartosc dis[v ] juz sie nie zmieni, borozpatrujemy wierzchołki coraz bardziej odległe od sudowodnimy, ze w momencie odwiedzania v najkrótszasciezka z s do v ma długosc dis[v ]:

dowód przez indukcje "w czasie"baza — w momencie wejscia do s zachodzi dis[s] = 0krok indukcyjny — załózmy, ze odwiedzamy v :najkrótsza sciezka do v musi biec tylko przez juzodwiedzone wierzchołki, bo v ma najnizsza wartosc wtablicy dis sposród nieodwiedzonych wierzchołkówjest wiec ona postaci (s, x1, . . . , xn, v) dla odwiedzonychxirozwazylismy ja relaksujac krawedz xn → v

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Dijkstry

Dlaczego to działa?

po rozpatrzeniu v wartosc dis[v ] juz sie nie zmieni, borozpatrujemy wierzchołki coraz bardziej odległe od sudowodnimy, ze w momencie odwiedzania v najkrótszasciezka z s do v ma długosc dis[v ]:

dowód przez indukcje "w czasie"baza — w momencie wejscia do s zachodzi dis[s] = 0krok indukcyjny — załózmy, ze odwiedzamy v :najkrótsza sciezka do v musi biec tylko przez juzodwiedzone wierzchołki, bo v ma najnizsza wartosc wtablicy dis sposród nieodwiedzonych wierzchołkówjest wiec ona postaci (s, x1, . . . , xn, v) dla odwiedzonychxirozwazylismy ja relaksujac krawedz xn → v

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Dijkstry

Dlaczego to działa?

po rozpatrzeniu v wartosc dis[v ] juz sie nie zmieni, borozpatrujemy wierzchołki coraz bardziej odległe od sudowodnimy, ze w momencie odwiedzania v najkrótszasciezka z s do v ma długosc dis[v ]:

dowód przez indukcje "w czasie"baza — w momencie wejscia do s zachodzi dis[s] = 0krok indukcyjny — załózmy, ze odwiedzamy v :najkrótsza sciezka do v musi biec tylko przez juzodwiedzone wierzchołki, bo v ma najnizsza wartosc wtablicy dis sposród nieodwiedzonych wierzchołkówjest wiec ona postaci (s, x1, . . . , xn, v) dla odwiedzonychxirozwazylismy ja relaksujac krawedz xn → v

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Implementacja

ImplementacjaImplementacja algorytmu Dijkstry znajduje sie w notatkach.

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Sieci z ujemnymi wagami

Sieci z ujemnymi wagamiprzypomnijmy, ze algorytm Dijkstry nie dział dla sieci zujemnymi wagamitakie sieci czasem pojawiaja sie w zadaniach, np:

Mamy n róznych przedmiotów oraz informacjeo mozliwych transakcjach postaci: "przedmiotA mozna wymienic na B zyskujac/dopłacajacC zł". Masz przedmiot nr. 1 a chcesz miecprzedmiot nr. n. Ile musisz minimalnie wydaclub ile mozesz maksymalnie zarobic?

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Sieci z ujemnymi wagami

Sieci z ujemnymi wagamiprzypomnijmy, ze algorytm Dijkstry nie dział dla sieci zujemnymi wagamitakie sieci czasem pojawiaja sie w zadaniach, np:

Mamy n róznych przedmiotów oraz informacjeo mozliwych transakcjach postaci: "przedmiotA mozna wymienic na B zyskujac/dopłacajacC zł". Masz przedmiot nr. 1 a chcesz miecprzedmiot nr. n. Ile musisz minimalnie wydaclub ile mozesz maksymalnie zarobic?

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Sieci z ujemnymi wagami

Ujemne cykle

zastanówmy sie co by sie stało, gdybysmy szukalinajkrótszych sciezek w grafie z ujemnym cyklem osumie wag −c (c > 0)niech v nalezy do takiego cyklujaka jest długosc najkrótszej sciezki z v do vjesli przejdziemy po cyklu to otrzymujemy sciezke okoszcie −cjesli przejdziemy po cyklu dwukrotnie to otrzymujemysciezke o koszcie −2cjesli przejdziemy po cyklu trzykrotnie to otrzymujemysciezke o koszcie −3c . . .widzimy, ze najkrótsza sciezka z v do v nie istnieje!

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Sieci z ujemnymi wagami

Ujemne cykle

zastanówmy sie co by sie stało, gdybysmy szukalinajkrótszych sciezek w grafie z ujemnym cyklem osumie wag −c (c > 0)niech v nalezy do takiego cyklujaka jest długosc najkrótszej sciezki z v do vjesli przejdziemy po cyklu to otrzymujemy sciezke okoszcie −cjesli przejdziemy po cyklu dwukrotnie to otrzymujemysciezke o koszcie −2cjesli przejdziemy po cyklu trzykrotnie to otrzymujemysciezke o koszcie −3c . . .widzimy, ze najkrótsza sciezka z v do v nie istnieje!

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Sieci z ujemnymi wagami

Ujemne cykle

zastanówmy sie co by sie stało, gdybysmy szukalinajkrótszych sciezek w grafie z ujemnym cyklem osumie wag −c (c > 0)niech v nalezy do takiego cyklujaka jest długosc najkrótszej sciezki z v do vjesli przejdziemy po cyklu to otrzymujemy sciezke okoszcie −cjesli przejdziemy po cyklu dwukrotnie to otrzymujemysciezke o koszcie −2cjesli przejdziemy po cyklu trzykrotnie to otrzymujemysciezke o koszcie −3c . . .widzimy, ze najkrótsza sciezka z v do v nie istnieje!

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Sieci z ujemnymi wagami

Ujemne cykle

zastanówmy sie co by sie stało, gdybysmy szukalinajkrótszych sciezek w grafie z ujemnym cyklem osumie wag −c (c > 0)niech v nalezy do takiego cyklujaka jest długosc najkrótszej sciezki z v do vjesli przejdziemy po cyklu to otrzymujemy sciezke okoszcie −cjesli przejdziemy po cyklu dwukrotnie to otrzymujemysciezke o koszcie −2cjesli przejdziemy po cyklu trzykrotnie to otrzymujemysciezke o koszcie −3c . . .widzimy, ze najkrótsza sciezka z v do v nie istnieje!

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Sieci z ujemnymi wagami

Ujemne cykle

zastanówmy sie co by sie stało, gdybysmy szukalinajkrótszych sciezek w grafie z ujemnym cyklem osumie wag −c (c > 0)niech v nalezy do takiego cyklujaka jest długosc najkrótszej sciezki z v do vjesli przejdziemy po cyklu to otrzymujemy sciezke okoszcie −cjesli przejdziemy po cyklu dwukrotnie to otrzymujemysciezke o koszcie −2cjesli przejdziemy po cyklu trzykrotnie to otrzymujemysciezke o koszcie −3c . . .widzimy, ze najkrótsza sciezka z v do v nie istnieje!

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Sieci z ujemnymi wagami

Ujemne cykle

zastanówmy sie co by sie stało, gdybysmy szukalinajkrótszych sciezek w grafie z ujemnym cyklem osumie wag −c (c > 0)niech v nalezy do takiego cyklujaka jest długosc najkrótszej sciezki z v do vjesli przejdziemy po cyklu to otrzymujemy sciezke okoszcie −cjesli przejdziemy po cyklu dwukrotnie to otrzymujemysciezke o koszcie −2cjesli przejdziemy po cyklu trzykrotnie to otrzymujemysciezke o koszcie −3c . . .widzimy, ze najkrótsza sciezka z v do v nie istnieje!

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Sieci z ujemnymi wagami

Ujemne cykle

zastanówmy sie co by sie stało, gdybysmy szukalinajkrótszych sciezek w grafie z ujemnym cyklem osumie wag −c (c > 0)niech v nalezy do takiego cyklujaka jest długosc najkrótszej sciezki z v do vjesli przejdziemy po cyklu to otrzymujemy sciezke okoszcie −cjesli przejdziemy po cyklu dwukrotnie to otrzymujemysciezke o koszcie −2cjesli przejdziemy po cyklu trzykrotnie to otrzymujemysciezke o koszcie −3c . . .widzimy, ze najkrótsza sciezka z v do v nie istnieje!

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Bellmana-Forda

Algorytm Bellmana-Forda

dlatego tez załózmy, ze rozwazamy graf z ujemnymiwagami, ale bez ujemnych cyklido liczenia najkrótszych sciezek w takim grafie mozemyuzyc algorytmu Bellmana-Forda

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Bellmana-Forda

Algorytm Bellmana-Forda

dlatego tez załózmy, ze rozwazamy graf z ujemnymiwagami, ale bez ujemnych cyklido liczenia najkrótszych sciezek w takim grafie mozemyuzyc algorytmu Bellmana-Forda

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Bellmana-Forda

Algorytm Bellmana-Forda:

dla kazdego v ∈ V ustaw dis[v ] =∞ustaw dis[s] = 0powtórz |V | − 1 razy ponizszy krok:

zrelaksuj wszystkie krawedzie w dowolnej kolejnosci

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Bellmana-Forda

Algorytm Bellmana-Forda:

dla kazdego v ∈ V ustaw dis[v ] =∞ustaw dis[s] = 0powtórz |V | − 1 razy ponizszy krok:

zrelaksuj wszystkie krawedzie w dowolnej kolejnosci

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Bellmana-Forda

Algorytm Bellmana-Forda:

dla kazdego v ∈ V ustaw dis[v ] =∞ustaw dis[s] = 0powtórz |V | − 1 razy ponizszy krok:

zrelaksuj wszystkie krawedzie w dowolnej kolejnosci

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Bellmana-Forda

Algorytm Bellmana-Forda:

dla kazdego v ∈ V ustaw dis[v ] =∞ustaw dis[s] = 0powtórz |V | − 1 razy ponizszy krok:

zrelaksuj wszystkie krawedzie w dowolnej kolejnosci

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Bellmana-Forda

Dlaczego to działa?

po 1-szym wykonaniu petli mamy policzone najkrótszesciezki do wierzchołków dla których najkrótsza sciezkaskłada sie z 1 krawedzipo 2-gim wykonaniu petli mamy policzone najkrótszesciezki do wierzchołków dla których najkrótsza sciezkaskłada sie z co najwyzej 2 krawedzipo k -tym wykonaniu petli mamy policzone najkrótszesciezki do wierzchołków dla których najkrótsza sciezkaskłada sie z co najwyzej k krawedzinajkrótsze sciezki składaja sie z co najwyzej |V | − 1,gdyz dłuzsze sciezki zawieraja cykl o nieujemnej wadze

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Bellmana-Forda

Dlaczego to działa?

po 1-szym wykonaniu petli mamy policzone najkrótszesciezki do wierzchołków dla których najkrótsza sciezkaskłada sie z 1 krawedzipo 2-gim wykonaniu petli mamy policzone najkrótszesciezki do wierzchołków dla których najkrótsza sciezkaskłada sie z co najwyzej 2 krawedzipo k -tym wykonaniu petli mamy policzone najkrótszesciezki do wierzchołków dla których najkrótsza sciezkaskłada sie z co najwyzej k krawedzinajkrótsze sciezki składaja sie z co najwyzej |V | − 1,gdyz dłuzsze sciezki zawieraja cykl o nieujemnej wadze

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Bellmana-Forda

Dlaczego to działa?

po 1-szym wykonaniu petli mamy policzone najkrótszesciezki do wierzchołków dla których najkrótsza sciezkaskłada sie z 1 krawedzipo 2-gim wykonaniu petli mamy policzone najkrótszesciezki do wierzchołków dla których najkrótsza sciezkaskłada sie z co najwyzej 2 krawedzipo k -tym wykonaniu petli mamy policzone najkrótszesciezki do wierzchołków dla których najkrótsza sciezkaskłada sie z co najwyzej k krawedzinajkrótsze sciezki składaja sie z co najwyzej |V | − 1,gdyz dłuzsze sciezki zawieraja cykl o nieujemnej wadze

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Bellmana-Forda

Dlaczego to działa?

po 1-szym wykonaniu petli mamy policzone najkrótszesciezki do wierzchołków dla których najkrótsza sciezkaskłada sie z 1 krawedzipo 2-gim wykonaniu petli mamy policzone najkrótszesciezki do wierzchołków dla których najkrótsza sciezkaskłada sie z co najwyzej 2 krawedzipo k -tym wykonaniu petli mamy policzone najkrótszesciezki do wierzchołków dla których najkrótsza sciezkaskłada sie z co najwyzej k krawedzinajkrótsze sciezki składaja sie z co najwyzej |V | − 1,gdyz dłuzsze sciezki zawieraja cykl o nieujemnej wadze

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Bellmana-Forda

Wykrywanie ujemnych cykli

zastanówmy sie co by sie stało, gdybysmy wykonali|V |-ta iteracje petlijesli uda nam sie cokolwiek zrelaksowac, to wiemy, zew grafie istnieje ujemny cykljesli w grafie istnieje ujemny cykl, to uda nam sie coszrelaksowac — gdybysmy nic nie zrelaksowali tokolejne powtórzenia petli tez nic by nie relaksowały azatem pomimo dopuszczenia sciezek składajacych siez dowolnie wielu krawedzi nie otrzymali bysmy sciezeko dowolnie małym koszcie — sprzecznoscotrzymujemy zatem prosty test na sprawdzanie czy grafzawiera ujemny cykl

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Bellmana-Forda

Wykrywanie ujemnych cykli

zastanówmy sie co by sie stało, gdybysmy wykonali|V |-ta iteracje petlijesli uda nam sie cokolwiek zrelaksowac, to wiemy, zew grafie istnieje ujemny cykljesli w grafie istnieje ujemny cykl, to uda nam sie coszrelaksowac — gdybysmy nic nie zrelaksowali tokolejne powtórzenia petli tez nic by nie relaksowały azatem pomimo dopuszczenia sciezek składajacych siez dowolnie wielu krawedzi nie otrzymali bysmy sciezeko dowolnie małym koszcie — sprzecznoscotrzymujemy zatem prosty test na sprawdzanie czy grafzawiera ujemny cykl

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Bellmana-Forda

Wykrywanie ujemnych cykli

zastanówmy sie co by sie stało, gdybysmy wykonali|V |-ta iteracje petlijesli uda nam sie cokolwiek zrelaksowac, to wiemy, zew grafie istnieje ujemny cykljesli w grafie istnieje ujemny cykl, to uda nam sie coszrelaksowac — gdybysmy nic nie zrelaksowali tokolejne powtórzenia petli tez nic by nie relaksowały azatem pomimo dopuszczenia sciezek składajacych siez dowolnie wielu krawedzi nie otrzymali bysmy sciezeko dowolnie małym koszcie — sprzecznoscotrzymujemy zatem prosty test na sprawdzanie czy grafzawiera ujemny cykl

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Algorytm Bellmana-Forda

Wykrywanie ujemnych cykli

zastanówmy sie co by sie stało, gdybysmy wykonali|V |-ta iteracje petlijesli uda nam sie cokolwiek zrelaksowac, to wiemy, zew grafie istnieje ujemny cykljesli w grafie istnieje ujemny cykl, to uda nam sie coszrelaksowac — gdybysmy nic nie zrelaksowali tokolejne powtórzenia petli tez nic by nie relaksowały azatem pomimo dopuszczenia sciezek składajacych siez dowolnie wielu krawedzi nie otrzymali bysmy sciezeko dowolnie małym koszcie — sprzecznoscotrzymujemy zatem prosty test na sprawdzanie czy grafzawiera ujemny cykl

Grafy c.d. —cykl Eulera,

algorytmDijkstry i

Bellmana-Forda

Cykl EuleraWstep

Istnienie

Wyznaczanie

NajkrótszesciezkiWstep

Dijkstra

Bellman-Ford

Implementacja

ImplementacjaImplementacja algorytmu Bellmana-Forda znajduje sie wnotatkach.