Reprezentacja ważonego grafu nieskierowanego
Transkrypt
Reprezentacja ważonego grafu nieskierowanego
Reprezentacja ważonego grafu nieskierowanego
Przykład nieskierowany grafu G=(V,E) z wagami krawędzi:
Zbiór wierzchołków V = { 0, 1, 2, 3, 4, 5 }. Liczba wierzchołków: |V| = 6.
Oczywiście numeracja zaczynająca się od 0 lub od 1 jest kwestią wyboru.
Stopień wierzchołka to liczba wychodzących od niego krawędzi, w naszym
przypadku równoważne jest to liczbie sąsiadów wierzchołka. Stopień całego grafu Δ
to maksymalny ze stopni jego wierzchołków. W tym przypadku Δ = 3, ponieważ
najwięcej sąsiadów (trzech) ma wierzchołek 0.
Graf posiada 5 krawędzi o wagach 10, 17,15, 20 i 12. Liczba krawędzi |E| = 5.
Zauważmy, że maksymalna możliwa liczba krawędzi to |V| * (|V|-1) / 2 tzn. każdy
wierzchołek połączony z każdym innym (pomijamy krawędzie typu (u,v), czyli "sam
do siebie"), krawędź (u,v) jest równoważna (v,u), więc dzielimy przez 2. Dla
powyższego grafu możliwych jest 6 * 5 / 2 = 15 krawędzi. Jednak w grafie jest tylko
5 krawędzi, czyli 1/3 możliwych. Jest to więc graf stosunkowo rzadki.
Reprezentacje
1. Macierz sąsiedztwa – tablica dwuwymiarowa rozmiaru |V|2. Jeśli istnieje
krawędź (u,v), to wartość tablica[u][v] = w(u,v). Jeśli krawędź (u,v) nie istnieje
to tablica[u][v] = -1 (możemy tak zrobić, bo zakładamy nieujemne wagi
krawędzi). Dla powyższego grafu macierz ma postać:
0
1
2
3
4
5
0
-1
17
-1
10
15
-1
1
17
-1
-1
-1
-1
-1
2
-1
-1
-1
-1
-1
12
3
10
-1
-1
-1
-1
-1
4
15
-1
-1
-1
-1
20
5
-1
-1
12
-1
20
-1
Macierz ma rozmiar 6 * 6 = 36 komórek. Żółte komórki oznaczają numer
wierzchołka i nie są częścią macierzy. Ponieważ krawędź (uv) = (v,u), to
macierz jest symetryczna, wobec czego szare komórki są nadmiarowe, więc
potrzebne jest tylko 21 komórek.
Zalety:
1. Dostęp do krawędzi (u,v) w czasie O(1).
2. Przeszukanie sąsiadów wierzchołka w czasie O(|V|).
Wady:
1. Duży rozmiar: O( |V|2 ).
2. Reprezentacja mało efektywna dla grafów rzadkich.
2. Lista sąsiedztwa – |V|-elementowa tablica list, i-ty element tablicy zawiera
listę sąsiadów i-tego wierzchołka. Należy przechowywać zarówno numer
sąsiada, jak i wagę krawędzi łączącej go z i-tym wierzchołkiem. Zawartość
struktury dla powyższego grafu (elementy listy podane są w formacie (indeks
sąsiada, waga krawędzi)):
Wierzchołek
Lista
0
(1,17) → (3,10) → (4,15)
1
(0,17)
2
(5, 12)
3
(0,10)
4
(0,15) → (5, 20)
5
(2, 12) → (4, 20)
Łączna liczba elementów na listach to 2*|E| (każda krawędź musi być wpisana
dwa razy, po razie dla każdego wierzchołka stanowiącego jej koniec).
Zalety:
1. Przeszukanie sąsiadów wierzchołka w czasie O( min{ Δ , |E| , |V| } ).
2. Rozmiar: O( |E| + |V| ).
3. Reprezentacja wydajna dla grafów rzadkich i o niskim stopniu.
Wady:
1. Dostęp do krawędzi (u,v) w czasie O( min{ Δ , |E| , |V| } ).
1. Lista krawędzi – |E|-elementowa lista wszystkich krawędzi grafu. Każdy
element tej listy zawiera trzy liczby opisujące krawędź: indeks wierzchołka
początkowego, indeks wierzchołka końcowego oraz wagę. Lista dla grafu
opisywanego powyżej ma postać:
Początek
Koniec
Waga
0
1
17
0
3
10
0
4
15
2
5
12
4
5
20
Kolejność krawędzi nie jest istotna. Dla krawędzi (u,v) nie ma potrzeby
dodawania osobno krawędzi (v,u).
Zalety:
1. Rozmiar: O( |E| ).
2. Reprezentacja wydajna dla grafów rzadkich.
Wady:
3. Dostęp do krawędzi (u,v) w czasie O( |E| ).
4. Przeszukanie sąsiadów wierzchołka w czasie O( |E| ).
Porównanie reprezentacji:
Kryterium
Macierz sąsiedztwa
Lista sąsiedztwa
Lista krawędzi
Rozmiar
|V|2
2 * |E| + |V|
|E|
Czas dostępu do
krawędzi (u,v)
stały
min { Δ , |E| , |V| }
|E|
Czas przeszukania
sąsiadów
|V|
min { Δ , |E| , |V| }
|E|
Wydajność dla
grafów rzadkich
niska
wysoka
wysoka
Wydajność dla
grafów o niskim
stopniu
niska
wysoka
niska