Algorytmy i struktury danych Reprezentacja grafu Wybrane problemy Graf Prosty Skierowany Wielokrotne krawędzie Pętle Wagi Reprezentacja grafu Macierz sąsiedztwa A B B D A B C D 1 0 0 A C 1 C D Lista sąsiedztwa A B B A C C B D D B C D Jeśli macierz jest symetryczna (graf.
Download
Report
Transcript Algorytmy i struktury danych Reprezentacja grafu Wybrane problemy Graf Prosty Skierowany Wielokrotne krawędzie Pętle Wagi Reprezentacja grafu Macierz sąsiedztwa A B B D A B C D 1 0 0 A C 1 C D Lista sąsiedztwa A B B A C C B D D B C D Jeśli macierz jest symetryczna (graf.
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.
Kolorowanie grafów
Należy przeprowadzić przydział
kolorów w taki sposób, aby sąsiedzi
otrzymali różne kolory
KOLOROWANIE
wierzchołków
krawędzi
Kolorowanie grafów heuryst. LF
Wybierz niepomalowany wierzchołek
o największym stopniu;
Przydziel wierzchołkowi najniższy możliwy kolor.
Dobroć algorytmu jest liniowa,
tj. można pokazać graf, dla którego:
liczba użytych kolorów
~ liczba wierzchołków
optymalna liczba kolorów
Kolorowanie grafów heuryst. SL
Wybierz wierzchołek o najmniejszym stopniu
w nieprzetworzonym podgrafie;
Wstaw wierzchołek na początek sekwencji;
Usuń z podgrafu wierzchołek i incydentne z nim
krawędzie;
Po uporządkowaniu wszystkich wierzchołków
przydzielaj kolejnym wierzchołkom w sekwencji
najniższe możliwe kolory.
Dobroć algorytmu jest liniowa
Kolorowanie grafów heuryst. SLF
Wybierz wierzchołek o największym stopniu
saturacyjnym (największej liczbie różnobarwnych
sąsiadów), a w przypadku kilku wierzchołków
o tym samym stopniu wybierz ten o najwyższym
stopniu klasycznym;
Przydziel wierzchołkowi najniższy możliwy kolor.
Cykl Hamiltona
Cykl Hamiltona;
Problem Komiwojażera;
Algorytm przybliżony.