Reprezentacja grafow i algorytmy grafowe

advertisement
Algorytmy i struktury
danych
Reprezentacja grafu
Wybrane problemy
Graf
11
Prosty
Skierowany
Wielokrotne krawędzie
11
Pętle
Wagi
7
10
Reprezentacja grafu
Macierz sąsiedztwa
A
1
B
B
D
A B C D
1 0 0
A
C
1
1
C
D
Lista sąsiedztwa

A
B
B
A
C
C
B
D
D
B
C
D
Jeśli macierz jest symetryczna (graf nieskierowany),
można przechowywać tylko jedną połówkę.
Reprezentacja grafu
p
m n o p
m 0 1 0 1
Macierz incydencji
Lista incydencji
m
n
1
0
1
1
o
0
1
0
1
p
1
1
1
0
m
p
n
n
m
o
o
p
n
p
m
n
o
p
o
n
Reprezentacja wag
Macierz sąsiedztwa
Lista incydencji
A
2
A B C D
A 0 0 0 0
B
2
0
0
0
C
0
3
0
2
D
0
7
5
0
A
B
A,2
C
B,3
D,2
D
B,7
C,5
7
D
5
2
B
3
C
Składowe spójnosci
DFS
Minimalne drzewo spinające
2
4
2
1 3
6 2 8
3
Zastosowania – np. budowa sieci dróg
6 4
5
Minimalne drzewo spinające
Alg Kruskala:
Wybieraj kolejno krawędzie o minimalnej wadze
tak, by nie tworzyły cyklu.
Pot. problem: stwierdzanie obecności cyklu.
Alg Prima-Dijkstry:
Drzewo = krawędź o minimalnej wadze;
Spośród krawędzi incydentnych z aktualnym
drzewem wybierz krawędź
o najmniejszej wadze;
Dodaj krawędź do drzewa.
Pot. problem: grafy niespójne.
Minimalna droga
2
4
3
1 3
6 7 9
3
7
3 4
Zastosowania:
- wybór najkrótszej (najszybszej) trasy przejazdu;
- wybór najtańszego procesu technologicznego.
Alg. Dijkstry

1.
2.
3.
4.
Z.: Wagi są nieujemne
Dla sąsiadów wierzchołka startowego S ustaw
odległość di równą wadze krawędzi e(s,i), dla
każdego wierzchołka innego niż S inicjujemy di = 
Spośród nieodwiedzonych wierzchołków wybierz
wierzchołek i o mininimalnej ogległości di
Dla sąsiadów j wybranego wierzchołka aktualizuj
odległość jako min{ dj, di+e(j,w) }
Jeżeli są nieosiągnięty został wierzchołek końcowy
K (lub są nieodwiedzone wierzchołki gdy nie
zadajemy K) przejdź do punktu 2
Droga, cykl Eulera
Marszruta – otwarta (zamknięta), zawierająca
wszystkie krawędzie w grafie
Zastosowania:
Problem chińskiego listonosza;
Rysowanie/wycinanie figur przy pomocy plotera.
Minimalne drzewo spinające
Algorytm Dijkstry:
 Dla wszystkich wierzchołków ustal s=;
 Dla w. początkowego P ustal s=0. Podstaw D={P};
 Zaktualizuj odległość s’ dla wszystkich
wierzchołków sąsiednich do D;
 s’[w] = min { s[x] + waga krawędzi {x, w} ;
po wszystkich x należących do D };
 Wybierz wierzchołek o minimalnej s’, podstaw dla
niego s=s’. D = D  {w}.
Algorytm pozwala efektywnie wyznaczyć sieć dróg z określonego wierzchołka do wszystkich innych.
Pot. problem: ujemne wagi.
Cykl Eulera - alg Fleury’ego
Wystartuj z wierzchołka o nieparzystym stopniu
(jeśli jest);
 Wybierz dowolną krawędź, ale most wybieraj
w
ostateczności;
 Przejdź do kolejnego wierzchołka.

Algorytm działa dla grafów eulerowkich,
półeulerowskich.
Problematyczna jest jednak implementacja testu,
czy krawędź jest mostem.
Cykl Eulera – alg. ze stosem
Wystartuj z dowolnego wierzchołka;
 Jeżeli istnieją nie przechodzone dotąd krawędzie
incydentne z bieżącym wierzchołkiem:
• Wybierz dowolną krawędź;
• Przejdź do kolejnego wierzchołka
i odłóż go na stos;
 W przeciwnym wypadku:
• Przenieś wierzchołek do rozwiązania
i zdejmij go ze stosu;
• Przejdź do wierzchołka na szczycie stosu.

Algorytm wymaga grafu eulerowskiego.
Download