• Nie Znaleziono Wyników

Struktury danych i złożoność obliczeniowa Wykład 5.

N/A
N/A
Protected

Academic year: 2021

Share "Struktury danych i złożoność obliczeniowa Wykład 5."

Copied!
54
0
0

Pełen tekst

(1)

Struktury danych

i złożoność obliczeniowa Wykład 5.

Prof. dr hab. inż. Jan Magott

(2)

Algorytmy grafowe:

• podstawowe pojęcia,

• reprezentacja grafów,

• metody przeszukiwania,

• minimalne drzewa rozpinające,

• problemy ścieżkowe.

(3)

Algorytmy grafowe: podstawowe pojęcia

Graf nieskierowany jest parą uporządkowaną 𝐺 = 𝑉, 𝐸 , gdzie 𝑉 = 𝑣1, 𝑣2, … , 𝑣𝑛 jest zbiorem wierzchołków (ang.

vertices),

𝐸 = 𝑒1, 𝑒2, … , 𝑒𝑛 jest zbiorem krawędzi (ang. edges),

𝑒𝑖 = {𝑣1, 𝑣2} jest łukiem będącym zbiorem dwuelementowym wierzchołków.

𝑣3 𝑣1

𝑣5

𝑣4 𝑣2

𝑣6 𝑒1

𝑒1 = {𝑣1, 𝑣2} Nie ma pętli {𝑣𝑖, 𝑣𝑖}.

(4)

Algorytmy grafowe: podstawowe pojęcia

Droga (ścieżka) w grafie nieskierowanym jest ciągiem

krawędzi ({𝑣1, 𝑣2}, 𝑣2, 𝑣3 , … , {𝑣𝑘−2, 𝑣𝑘−1}, 𝑣𝑘−1, 𝑣𝑘 ), który można wyrazić ciągiem wierzchołków

(𝑣1, 𝑣2, 𝑣3, … , 𝑣𝑘−2, 𝑣𝑘−1, 𝑣𝑘).

𝑣3

𝑣5

𝑣4 𝑣2

𝑣6 𝑣1

({𝑣6, 𝑣5}, 𝑣4, 𝑣5 , {𝑣3, 𝑣4}, {𝑣3, 𝑣2}, 𝑣1, 𝑣2 ) Niekiedy dla uproszczenia przyjmuje się:

((𝑣6, 𝑣5), (𝑣5, 𝑣4), (𝑣4,𝑣3), (𝑣3, 𝑣2), (𝑣2, 𝑣1)) (𝑣6, 𝑣5, 𝑣4, 𝑣3, 𝑣2 , 𝑣1 )

(5)

Algorytmy grafowe: podstawowe pojęcia

Graf skierowany jest parą uporządkowaną 𝐺 = 𝑉, 𝐴 , gdzie 𝑉 = 𝑣1, 𝑣2, … , 𝑣𝑛 jest zbiorem wierzchołków (ang. vertices), 𝐴 = 𝑎1, 𝑎2, … , 𝑎𝑛 jest zbiorem łuków (ang. arcs),

𝑎𝑖 = 𝑣𝑗, 𝑣𝑘 lub 𝑎𝑖 =< 𝑣𝑗, 𝑣𝑘 > jest łukiem będącym parą uporządkowaną wierzchołków.

𝑣3 𝑣1

𝑣5

𝑣4 𝑣2

𝑣6 𝑎1

𝑎1 = (𝑣2, 𝑣1)

(6)

Algorytmy grafowe: podstawowe pojęcia

Droga (ścieżka) w grafie skierowanym jest ciągiem łuków ((𝑣1, 𝑣2), (𝑣2, 𝑣3), … , (𝑣𝑘−2, 𝑣𝑘−1), (𝑣𝑘−1, 𝑣𝑘)), który można wyrazić ciągiem wierzchołków (𝑣1, 𝑣2, 𝑣3, … , 𝑣𝑘−2, 𝑣𝑘−1, 𝑣𝑘).

𝑣3

𝑣5

𝑣4 𝑣2

𝑣6 𝑣1

( 𝑣6, 𝑣5 , 𝑣5, 𝑣4 , (𝑣4, 𝑣3 ), (𝑣3, 𝑣2)) (𝑣6, 𝑣5, 𝑣4, 𝑣3, 𝑣2 )

(7)

Algorytmy grafowe: podstawowe pojęcia

Rozmiary grafu:

• Liczba wierzchołków 𝑛,

• Liczba krawędzi (łuków) 𝑚.

(8)

Algorytmy grafowe: podstawowe pojęcia

Graf nieskierowany z wagami krawędzi jest trójką uporządkowaną 𝐺 = 𝑉, 𝐸, 𝑊 , gdzie:

𝑅 jest zbiorem liczb rzeczywistych, 𝑊: 𝐸 → 𝑅 jest funkcją wagi krawędzi.

Graf nieskierowany z wagami wierzchołków jest trójką uporządkowaną 𝐺 = 𝑉, 𝐸, 𝑊 , gdzie

𝑊: 𝑉 → 𝑅 jest funkcją wagi wierzchołków.

Graf skierowany z wagami łuków jest trójką uporządkowaną 𝐺 = 𝑉, 𝐴, 𝑊 , gdzie:

𝑊: 𝐴 → 𝑅 jest funkcją wagi łuku.

(9)

Algorytmy grafowe: podstawowe pojęcia

Przykład grafu nieskierowanego z wagami krawędzi i jego macierz wag.

Niekiedy na przekątnej wpisywane są inne wartości wyróżnione.

𝑣3 𝑣1

𝑣5

𝑣4 𝑣2

𝑣6

2 4

4 1 7

2 5

3 1

∞ 2 4 ∞ ∞ ∞

2 ∞ 1 4 ∞ ∞

4 1 ∞ 7 5 3

∞ 4 7 ∞ 2 ∞

∞ ∞ 5 2 ∞ 1

∞ ∞ 3 ∞ 1 ∞ 1 2 3 4 5 6 1

2 3 4 5 6

(10)

Algorytmy grafowe: podstawowe pojęcia

Wagą (długością) drogi w grafie nieskierowanym jest suma wag krawędzi tej drogi.

Wagą (długością) drogi w grafie skierowanym jest suma wag łuków tej drogi.

(11)

Algorytmy grafowe: podstawowe pojęcia

𝑣3

𝑣5

𝑣4 𝑣2

𝑣6

2 4

4 1 7

2 5

3 1

𝑣1

Waga drogi między wierzchołkami 𝑣1 a 𝑣6 równa 21

(12)

Algorytmy grafowe: podstawowe pojęcia

𝑣3

𝑣5

𝑣4 𝑣2

𝑣6

2 4

4 1 7

2 5

3 1

𝑣1

Waga drogi między wierzchołkami 𝑣1 a 𝑣6 równa 6

(13)

Algorytmy grafowe: podstawowe pojęcia

Graf nieskierowany jest spójnym, jeśli istnieje droga między każdą parą jego wierzchołków.

Graf skierowany jest spójnym, jeśli jego wersja nieskierowana jest grafem spójnym.

Drzewo nieskierowane jest grafem nieskierowanym spójnym i acyklicznym.

𝐸 = 𝑉 − 1.

Dołączenie krawędzi do drzewa nieskierowanego tworzy cykl. Usunięcie krawędzi z drzewa nieskierowanego

powoduje jego niespójność.

(14)

Algorytmy grafowe: podstawowe pojęcia

Podgrafem grafu nieskierowanego 𝐺 = 𝑉, 𝐸 jest taki graf, że 𝑉 ⊂ 𝑉 i 𝐸 ⊂ 𝐸.

Drzewo rozpinające nieskierowanego grafu spójnego 𝐺 = (𝑉, 𝐸) jest podgrafem 𝑆 = (𝑉𝑆, 𝐸𝑆) spójnym będącym drzewem takim, że 𝑉𝑆 = 𝑉.

Minimalne drzewo rozpinające grafu nieskierowanego z wagami jest drzewem rozpinającym o minimalnej sumie wag.

(15)

Algorytmy grafowe: podstawowe pojęcia

Przykład drzewa rozpinającego nieskierowanego grafu spójnego

𝑣3

𝑣5

𝑣4 𝑣2

𝑣6

2 4

4 1 7

2 5

3 1

𝑣3

𝑣5

𝑣4 𝑣2

𝑣6

2 4

4 1 7

2 5

3 1

𝑣1 𝑣1

Waga drzewa rozpinającego 20

(16)

Algorytmy grafowe: podstawowe pojęcia

Przykład drzewa rozpinającego nieskierowanego grafu spójnego

𝑣3

𝑣5

𝑣4 𝑣2

𝑣6

2 4

4 1 7

2 5

3 1

𝑣3

𝑣5

𝑣4 𝑣2

𝑣6

2 4

4 1 7

2 5

3 1

𝑣1 𝑣1

Waga drzewa rozpinającego 11

(17)

Algorytmy grafowe: reprezentacja grafów

Podział grafów nieskierowanych ze względu na liczbę krawędzi względem liczby wierzchołków grafu pełnego:

• Rzadki, gdy |𝐸| ≪ |𝑉|2,

• Gęsty, gdy |𝐸| bliskie |𝑉|2.

Reprezentacja grafów, jeśli ważniejsza zajętość pamięci:

Rzadkich - raczej za pomocą list, Gęstych - raczej macierzowa.

Reprezentacja macierzowa daje szybszy dostęp. Oszczędność pamięci można uzyskać przez pamiętanie ośmiu składowych macierzy w jednym bajcie.

(18)

Algorytmy grafowe: podstawowe pojęcia

Rozmiary grafu:

• Liczba wierzchołków 𝑛,

• Liczba krawędzi (łuków) 𝑚.

(19)

Algorytmy grafowe: reprezentacja grafów

Graf nieskierowany i jego macierz sąsiedztwa.

0 1 1 0 0 0 1 0 1 1 0 0 1 1 0 1 1 1 0 1 1 0 1 0 0 0 1 1 0 1 0 0 1 0 1 0 1 2 3 4 5 6 1

2 3 4 5 6 𝑣3

𝑣1

𝑣5

𝑣4 𝑣2

𝑣6 Niekiedy na przekątnej wpisywane są inne wartości wyróżnione.

Zajętość pamięci 𝑂(𝑛2)

(20)

Algorytmy grafowe: reprezentacja grafów

Graf nieskierowany i jego listy sąsiedztwa

1 2 3 4 5 6

4 2

3 2

4 2 11

1 3 4

4 2 11

4 2 1

2 11

5 6

4 2 11

3 2 5

4 2 11

4 3 6

4 2

5 3

𝑣3

𝑣5

𝑣4 𝑣2

𝑣6

Zajętość pamięci 𝑂(𝑛 + 𝑚) 𝑣1

(21)

Algorytmy grafowe: reprezentacja grafów

Graf nieskierowany i jego macierz incydencji.

Niekiedy na przekątnej wpisywane są inne wartości wyróżnione.

𝑣3 𝑣1

𝑣5 𝑣4 𝑣2

𝑣6

𝑒2 𝑒4

𝑒1

𝑒3 𝑒5

𝑒6 𝑒7

𝑒8

𝑒9

0 1 1 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 1 0 1 0 1 0 1 1 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 0 0 1 1 1 2 3 4 5 6 7 8 9 1

2 3 4 5 6

(22)

Algorytmy grafowe: reprezentacja grafów

Graf skierowany i jego macierz sąsiedztwa

𝑣3 𝑣1

𝑣5

𝑣4

𝑣6 𝑎1

0 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 1 1 0 1 1 0 1 0 0 0 0 0 1 1 0 0 0 0 0 0 1 2 3 4 5 6 1

2 3 4 5 6 𝑣2

(23)

Algorytmy grafowe: reprezentacja grafów

Graf skierowany i jego macierz incydencji

𝑣3 𝑣1

𝑣5 𝑣4 𝑣2

𝑣6

𝑎2 𝑎4

𝑎1

𝑎3 𝑎5

𝑎6 𝑎7

𝑎8

𝑎9

0 −1 −1 0 0 0 0 0 0

1 1 0 −1 0 0 0 0 0

−1 0 1 0 1 0 1 1 0

0 0 0 1 −1 1 0 0 0

0 0 0 0 0 −1 −1 0 1

0 0 0 0 0 0 0 −1 −1

1 2 3 4 5 6 7 8 9 1

2 3 4 5 6

(24)

Algorytmy grafowe: reprezentacja grafów

Przykład grafu nieskierowanego z wagami krawędzi i jego macierz wag.

Niekiedy na przekątnej wpisywane są inne wartości wyróżnione.

𝑣3 𝑣1

𝑣5

𝑣4 𝑣2

𝑣6

2 4

4 1 7

2 5

3 1

∞ 2 4 ∞ ∞ ∞

2 ∞ 1 4 ∞ ∞

4 1 ∞ 7 5 3

∞ 4 7 ∞ 2 ∞

∞ ∞ 5 2 ∞ 1

∞ ∞ 3 ∞ 1 ∞ 1 2 3 4 5 6 1

2 3 4 5 6

(25)

Algorytmy grafowe: podstawowe pojęcia

Przykład grafu nieskierowa- nego z wagami krawędzi i jego lista krawędzi w

postaci tablicy.

𝑣3 𝑣1

𝑣5

𝑣4 𝑣2

𝑣6

2 4

4 1 7

2 5

3 1

𝒊𝒏𝒅(𝒗𝒊) 𝒊𝒏𝒅(𝒗𝒋) 𝑾({𝒗𝒊, 𝒗𝒋})

1 2 2

1 3 4

2 3 1

2 4 4

3 4 7

3 5 5

4 5 2

3 6 3

5 6 1

Zajętość pamięci 𝑂(𝑚)

(26)

Algorytmy grafowe: metody przeszukiwania

Metody przeszukiwania:

• Wszerz (ang. Breadth-First Search),

• W głąb (ang. Depth-First Search).

(27)

Algorytmy grafowe: metody przeszukiwania

Kolejność odwiedzania wiezrchołków w BFS działającej na drzewie

1 3 2

13 12 11 10 9 8

7 6 5 4

17 16 15 14

(28)

Algorytmy grafowe: metody przeszukiwania

Przeszukiwanie wszerz

Kolory ( ang. 𝑐𝑜𝑙𝑜𝑟) wierzchołków:

• Biały (nieodwiedzony),

• Szary (odwiedzony, nie wszyscy sąsiedzi tegoż odwiedzeni),

• Czarny (odwiedzeni: ten i jego sąsiedzi).

Metoda wykonywana z:

• jednego źródła,

• wielu źródeł.

(29)

𝑑[𝑢] – zmienna przechowująca odległość od źródła 𝑠 do wierzchołka 𝑢 – najkrótszą odległość daną liczbą krawędzi, 𝑑 𝑠 = 0, 𝜋 𝑢 − zmienna wskazująca wierzchołek, z którego wierzchołek 𝑢 został

odwiedzony, 𝑢=NIL, jeśli 𝑢 = 𝑠 lub 𝑢 nie został jeszcze odwiedzony.

𝑂( 𝑉 + |𝐸|)

[CLRS, Wprowadzenie do algorytmów]

(30)

Algorytmy grafowe: metody przeszukiwania

Kolejność odwiedzania wierzchołków w DFS działającej na drzewie

(31)

Algorytmy grafowe: metody przeszukiwania

Przeszukiwanie w głąb

Kolory ( ang. 𝑐𝑜𝑙𝑜𝑟) wierzchołków:

• Biały (nieodwiedzony),

• Szary (odwiedzony, nie wszyscy sąsiedzi tegoż odwiedzeni),

• Czarny (odwiedzeni: ten i jego sąsiedzi).

Metoda wykonywana z:

• jednego źródła,

• wielu źródeł.

(32)

𝑂( 𝑉 + |𝐸|) [CLRS, Wprowadzenie do algorytmów]

(33)

Algorytmy grafowe: minimalne drzewa rozpinające

Drzewo rozpinające nieskierowanego grafu spójnego 𝐺 = (𝑉, 𝐸) jest podgrafem 𝑆 = (𝑉𝑆, 𝐸𝑆) spójnym będącym drzewem takim, że 𝑉𝑆 = 𝑉.

Minimalne drzewo rozpinające grafu nieskierowanego z wagami krawędzi jest drzewem rozpinającym o minimalnej sumie wag krawędzi.

(34)

Algorytmy grafowe: minimalne drzewa rozpinające

Idea algorytmu Kruskala: z posortowanej niemalejąco wg wag listy krawędzi – dołączane są kolejne, jeśli nie tworzą cyklu (algorytm zachłanny).

Lista uporządkowana: (𝑣2,𝑣3) (𝑣5,𝑣6) (𝑣5,𝑣4) (𝑣1,𝑣2) (𝑣1,𝑣3) (𝑣2,𝑣4) (𝑣6,𝑣3) (𝑣5,𝑣3)(𝑣4,𝑣3)

𝑣3

𝑣5 𝑣4 𝑣2

𝑣6

2 4

4 1 7

2 5

4 1

𝑣1

𝑣3

𝑣5

𝑣4 𝑣2

𝑣6

2 4

4 1 7

2 5

4 1

𝑣1

𝑣3

𝑣5 𝑣4

𝑣6

2 4

4 1 7

5 4 1

𝑣1 𝑣2

2

(35)

Algorytmy grafowe: minimalne drzewa rozpinające

Idea algorytmu Kruskala: z posortowanej niemalejąco wg wag listy krawędzi – dołączane są kolejne, jeśli nie tworzą cyklu (algorytm zachłanny).

Lista uporządkowana: (𝑣2,𝑣3) (𝑣5,𝑣6) (𝑣5,𝑣4) (𝑣1,𝑣2) (𝑣1,𝑣3) (𝑣2,𝑣4) (𝑣6,𝑣3) (𝑣5,𝑣3)(𝑣4,𝑣3)

𝑣3 2

𝑣5 𝑣4

𝑣6

2 4

4 1 7

5 4 1

𝑣1 𝑣2

𝑣3 2

𝑣5 𝑣4

𝑣6

2 4

4 1 7

5 4 1

𝑣1 𝑣2

𝑣3 2

𝑣5 𝑣4

𝑣6

2 4

4 1 7

5 4 1

𝑣1 𝑣2

(36)

Algorytmy grafowe: minimalne drzewa rozpinające

Idea algorytmu Kruskala: z posortowanej niemalejąco wg wag listy krawędzi – dołączane są kolejne, jeśli nie tworzą cyklu (algorytm zachłanny).

Lista uporządkowana: (𝑣2,𝑣3) (𝑣5,𝑣6) (𝑣5,𝑣4) (𝑣1,𝑣2) (𝑣1,𝑣3) (𝑣2,𝑣4) (𝑣6,𝑣3) (𝑣5,𝑣3)(𝑣4,𝑣3)

𝑣3 2

𝑣5 𝑣4

𝑣6

2 4

4 1 7

5 4 1

𝑣1 𝑣2

𝑣3 2

𝑣5 𝑣4

𝑣6

2 4

4 1 7

5 4 1

𝑣1 𝑣2

(37)

Algorytmy grafowe: minimalne drzewa rozpinające

Idea algorytmu Kruskala:

1. Wszystkie wierzchołki zostają parami różnie

pokolorowane tworząc jednowierzchołkowe drzewa, 2. Z posortowanej niemalejąco wg wag listy krawędzi –

dołączane są kolejne, jeśli nie tworzą cyklu (algorytm zachłanny),

3. Dla dwu drzew łączonych w jedno ujednolicane zostają kolory.

(38)

Algorytmy grafowe: minimalne drzewa rozpinające

Idea algorytmu Kruskala: z posortowanej niemalejąco wg wag listy krawędzi – dołączane są kolejne, jeśli nie tworzą cyklu (algorytm zachłanny).

Przy próbie dołączenia krawędzi (𝑢, 𝑣) występują następujące przypadki:

1. Wierzchołki 𝑢, 𝑣 nie zostały wybrane (nie dołączono

krawędzi incydentnych z nimi), są różnie pokolorowane, 2. Dokładnie jeden z wierzchołków, przyjmijmy 𝑢, został

dotychczas wybrany, są różnie pokolorowane, 3. Oba wybrane ale różnie pokolorowane,

4. Oba wybrane ale jednolicie pokolorowane.

(39)

Algorytmy grafowe: minimalne drzewa rozpinające

Zał: Na początku wierzchołki o parami różnych kolorach.

1. Wierzchołki 𝑢, 𝑣 nie zostały dotąd wybrane (nie dołączono krawędzi incydentnych z nimi)

Dołączenie nowej krawędzi nie powoduje cyklu, a ujednoli- cenie kolorów wierzchołków 𝑢, 𝑣 daje nowe poddrzewo

𝑢

𝑣

𝑢

𝑣

(40)

2. Dokładnie jeden z wierzchołków, przyjmijmy 𝑢, został dotychczas wybrany

Dołączenie nowej krawędzi nie powoduje cyklu, a ujednoli- cenie kolorów daje większe poddrzewo

Algorytmy grafowe: minimalne drzewa rozpinające

𝑢

𝑣

𝑢

𝑣

(41)

3. Oba wybrane ale różnie pokolorowane

Dołączenie nowej krawędzi nie powoduje cyklu, a ujednoli- cenie kolorów daje większe poddrzewo

Algorytmy grafowe: minimalne drzewa rozpinające

𝑢 𝑣 𝑢 𝑣

(42)

Algorytmy grafowe: minimalne drzewa rozpinające

4. Oba wybrane ale jednolicie pokolorowane

Dołączenie nowej krawędzi spowodowałoby cykl 𝑢

𝑣

𝑢

𝑣

(43)

Algorytmy grafowe: minimalne drzewa rozpinające

Algorytm Kruskala 𝐴 ← ∅

for każdy wierzchołek 𝑣𝑖𝜖𝑉 do 𝐶(𝑣𝑖) ← 𝑖

posortuj krawędzie z 𝐸 niemalejąco wg wag 𝑊(𝑒𝑗)

for każda krawędź (𝑣𝑙, 𝑣𝑘) ∈ 𝐸 w kolejności niemalejących wag do if 𝐶(𝑣𝑙) ≠ 𝐶(𝑣𝑘)

then 𝐴 ← 𝐴 ∪ {(𝑣𝑙, 𝑣𝑘)}

Ujednolicenie kolorów wierzchołków

poddrzewa zawierającego 𝑣𝑙, 𝑣𝑘 ← 𝑂(𝑉)

return A 𝑂( 𝐸 log 𝐸 + |𝑉| ∙ |𝐸|)

(44)

Algorytmy grafowe: minimalne drzewa rozpinające

Idea algorytmu Prima:

Po wybraniu dowolnego wierzchołka, kolejno dołączany jest najbliższy sąsiad czyli wierzchołek połączony krawędzią o najmniejszej wadze z wcześniej dołączonymi

wierzchołkami.

𝑣3

𝑣5 𝑣4 𝑣2

𝑣6

2 4

4 1 7

2 5

4 1

𝑣1

𝑣3

𝑣5 𝑣4 𝑣2

𝑣6

2 4

4 1 7

2 5

4 1

𝑣1

𝑣3

𝑣5 𝑣4 𝑣2

𝑣6

2 4

4 1 7

2 5

4 1

𝑣1

(45)

Algorytmy grafowe: minimalne drzewa rozpinające

Idea algorytmu Prima:

Po wybraniu dowolnego wierzchołka, kolejno dołączany jest najbliższy sąsiad czyli wierzchołek połączony krawędzią o najmniejszej wadze z wcześniej dołączonymi

wierzchołkami.

𝑣3

𝑣5 𝑣4 𝑣2

𝑣6

2 4

4 1 7

2 5

4 1

𝑣1

𝑣3

𝑣5 𝑣4 𝑣2

𝑣6

2 4

4 1 7

2 5

4 1

𝑣1

𝑣3

𝑣5 𝑣4 𝑣2

𝑣6

2 4

4 1 7

2 5

4 1

𝑣1

(46)

Algorytmy grafowe: minimalne drzewa rozpinające

Idea algorytmu Prima:

Po wybraniu dowolnego wierzchołka, kolejno dołączany jest najbliższy sąsiad czyli wierzchołek połączony krawędzią o najmniejszej wadze z wcześniej dołączonymi

wierzchołkami.

𝑣3

𝑣5 𝑣4 𝑣2

𝑣6

2 4

4 1 7

2 5

4 1

𝑣1

𝑣3

𝑣5 𝑣4 𝑣2

𝑣6

2 4

4 1 7

2 5

4 1

𝑣1

(47)

Algorytmy grafowe: problemy ścieżkowe

Cykle o ujemnej wadze (długości) 𝑣𝑖

𝑠

Cykl o ujemnej wadze

Długość najkrótszej ścieżki z 𝑠 do 𝑣𝑖

dąży do ∞.

(48)

Algorytmy grafowe: problemy ścieżkowe

Wyznaczanie najkrótszych ścieżek z jednego źródła do wszystkich wierzchołków dla grafów skierowanych:

Wagi łuków mogą być ujemne

Algorytm Bellmana-Forda 𝑂(|𝑉| ∙ |𝐸|) Wagi łuków są nieujemne

Algorytm Dijkstry 𝑂( 𝑉 log 𝑉 + |𝐸|)

Acykliczny graf skierowany, Wagi łuków mogą być ujemne Algorytm oparty na sortowaniu topologicznym 𝑂( 𝑉 + |𝐸|)

(49)

𝑑[𝑢] – zmienna przechowująca górne oszacowanie odległości od źródła 𝑠 do wierzchołka 𝑢, 𝑑 𝑠 = 0,

𝜋 𝑢 − zmienna wskazująca wierzchołek, z którego wierzchołek 𝑢 został

odwiedzony przy wyznaczaniu tego oszacowania,

𝑑[𝑣]

𝑠

𝑣

𝑤(𝑢, 𝑣) 𝑢 𝑑[𝑢]

𝑂(log 𝑉 ) 𝑂( 𝑉 log 𝑉 + |𝐸|)

(50)

4

2

1

5

5

3 1

0 0

0 2

2

Elementy zbioru 𝑆 z oszacowaniem odległości od wierzch. 𝑠 7

s

Łuki badane w aktualnym kroku

0

4

2

1

5

5

3 1

0 0

0 2

2 s

0 2

4

(51)

4

2

1

5

5

3 1

0 0

0 2

2 s

0 2

4

4

2

1

5

5

3 1

0 0

0 2

2 s

0 2

3

7

(52)

4

2

1

5

5

3 1

2

2 s

0 2

3

5

8

6 4

2

1

5

5

3 1

0 0

0 2

2 s

0 2

3

7

(53)

4

2

1

5

5

3 1

2

2 s

0 2

3

5

8

6

4

2

1

5

5

3 1

2

2 s

0 2

3

5

7

6

(54)

4

2

1

5

5

3 1

2

2 s

0 2

3

5

7

6

4

2

1

5

5

3 1

2

2 s

0 2

3

5

7

6

Cytaty

Powiązane dokumenty

Zatem, jeśli istniałby algorytm wielomianowy do rozwiązywa- nia jakiegokolwiek problemu NP-zupełnego, to każdy problem z klasy NP (w tym również problemy NP-zupełne)

Nie można mówić, że dla problemu NP-zupełnego najprawdopodobniej nie zostanie znaleziony wielomianowy algorytm rozwiązujący.. Następny slajd

Sposób kodowania danych wejściowych ma wpływ na rozmiar problemu (długość danych wejściowych). Czy każdy z następujących sposobów

Problem

Dla każdego zlecenia znamy termin t, do którego ma zostać ono wykonane oraz zysk z za jego wykonanie, jeśli zlecenie zostanie zrealizowane w terminie. Za zlecenie niezrealizowane

Zaprojektuj optymalny algorytm pod względem pesymistycznej liczby porów- nań, który znajduje dwa środkowe elementy w zbiorze czterech elementów.. Chcemy ją uporządkować tak,

• (1 punkt) Jaka jest (asymptotycznie) pesymistyczna złożoność przy- wracania porządku kopcowego wyrażona jako funkcja n?. • (3 punkty) Jaka jest złożoność powyższego

Żadne pole nie może się pojawić na całej trasie (czyli tam i z powrotem) więcej niż raz, poza polem (1,1), które pojawia się na początku i na końcu trasy.. Zaprojektuj