Laboratorium 12

Transkrypt

Laboratorium 12
Nazwa przedmiotu: Algorytmy i złoŜoność (Laboratorium)
Prowadzący zajęcia: mgr inŜ. Przemysław Pardel
Laboratorium 12
LP
8.
Zakres materiału
Czas
realizacji
Grafy i podstawowe algorytmy grafowe.
3
Czas realizacji zadań: 3 godziny
Teoria:
Grafy
Grafem nazywamy parę zbiorów G = (V,E), gdzie V jest skończonym zbiorem wierzchołków,
a E jest zbiorem krawędzi.
Graf nieskierowany i graf skierowany
Graf lub graf nieskierowany to uporządkowana para G := (V,E) gdzie: V jest niepustym
zbiorem. Elementy tego zbioru nazywamy wierzchołkami, E jest rodziną dwuelementowych
podzbiorów zbioru wierzchołków V, zwanych krawędziami:
.
Wierzchołki naleŜące do krawędzi nazywane są jej końcami. Zazwyczaj V (i co za tym idzie E) są
określane jako zbiory skończone. Jednak powyŜsza definicja tego nie wymaga i w praktyce rozwaŜa
się teŜ czasami grafy o nieskończonej liczbie wierzchołków lub krawędzi.
Graf skierowany lub inaczej digraf to uporządkowana para G := (V,A) gdzie: V jest zbiorem
wierzchołków, A jest zbiorem uporządkowanych par róŜnych wierzchołków ze zbioru V, zwanych
krawędziami skierowanymi, lub łukami:
.
Przyjmuje się, Ŝe krawędź e:=(x,y) jest skierowana z x do y, czyli wychodzi z x, a wchodzi do y.
Graf mieszany to uporządkowana trójka G:=(V,E,A) gdzie zbiory V,E,A są zdefiniowane jak wyŜej,
czyli moŜe zawierać jednocześnie krawędzie skierowane i nieskierowane.
Sposoby reprezentacji grafów
Istnieją dwa podstawowe sposoby reprezentowania grafów. Są to:
1. Listy sąsiedztwa
2. Macierze sąsiedztwa
Najprostszą ze struktur danych umoŜliwiających przedstawienie skomplikowanego grafu lub jego
przechowywanie w pamięci komputera jest macierz sąsiedztwa, zawierająca dane na temat
połączeń między wierzchołkami. Macierz jest rozmiaru |V(G)| na |V(G)|, wyraz leŜący z i-tego
wiersza i j-tej kolumny zawiera wartość będącą liczbą krawędzi łączących i-ty i j-ty wierzchołek.
Sposób ten pozwala na reprezentację zarówno grafów prostych, jak i grafów zawierających
krawędzie wielokrotne oraz pętle własne. W przypadku grafów prostych wyrazami w macierzy będą
wartości boole'owskie – jest krawędź, bądź nie ma krawędzi).
Macierz sąsiedztwa i graf odpowiadający tej macierzy
Aby dowiedzieć się, ile krawędzi łączy wierzchołki , wystarczy sprawdzić wartość komórki A[i,j].
Tak zaimplementowana komputerowa struktura danych gwarantuje, Ŝe operacje sprawdzenia, czy
dodania oraz usunięcia krawędzi odbywają się w stałym czasie. Do jej wad naleŜy duŜa ilość
potrzebnej pamięci – O(n²), oraz fakt, Ŝe czas potrzebny do przejrzenia zbioru krawędzi jest
proporcjonalny do kwadratu liczby wierzchołków (złoŜoność obliczeniowa wynosi O(n²), zamiast do
liczby krawędzi.
Drugą popularną reprezentacją grafu są tzw. listy sąsiedztwa – dla kaŜdego wierzchołka
zapamiętywana jest lista sąsiadujących z nim wierzchołków, np.:
V1 – V2, V5
V2 – V1, V3, V5
V3 – V2, V4
V4 – V3, V5, V6
V5 – V1, V2, V4
V6 – V4
W implementacji tej metody stosuje się listy jednokierunkowe oraz jednowymiarową tablicę
wskaźników o rozmiarze |V(G)| , gdzie i-ty element tablicy jest wskaźnikiem do początku listy
przechowującej sąsiadów i-tego wierzchołka.
W odróŜnieniu od macierzy sąsiedztwa, lista sąsiedztwa wymaga ilości pamięci proporcjonalnej do
liczby krawędzi, takŜe przejrzenie całego zbioru krawędzi jest proporcjonalne do jego rozmiaru. W
stosunku do macierzy sąsiedztwa większą złoŜoność mają jednak operacje elementarne –
sprawdzenie, czy wymaga czasu proporcjonalnego do mniejszego ze stopni wierzchołków, a np.
usunięcie krawędzi – do większego z nich.
Podstawowe definicje:
Stopień wierzchołka v – Liczba kończących się w nim krawędzi. Oznaczenie: deg(v). W
przypadku grafów skierowanych mówi się o stopniach wejściowym i wyjściowym – degIn(v),
degOut(v)
ŚcieŜka – Jest wyznaczona przez wierzchołki, tj. moŜna ją opisać poprzez ciąg wierzchołków v1,
v2, …, vn
ŚcieŜka prosta – ŚcieŜka wyznaczona tak, by Ŝaden wierzchołek na trasie nie powtarzał się
ŚcieŜka zamknięta – ŚcieŜka v1, v2, …, vn, v1 , czyli kończąca się w początkowym wierzchołku
Cykl
Cyklem w grafie skierowanym nazywamy ścieŜkę v1, v2, …, vn zawierającą co najmniej jedną
krawędź, dla której v1 = vn.
Cyklem w grafie nieskierowanym nazywamy ścieŜkę v1, v2, …, vn , dla której v1 = vn,
wierzchołki v1, v2, …, vn są róŜne i k ≥ 2.
Graf nie zawierający cykli nazywamy acyklicznym.
Pętla – Krawędź zaczynająca i kończąca się w tym samym wierzchołku
Zadania do realizacji:
1. Jaki związek zachodzi pomiędzy stopniami wszystkich wierzchołków a liczbą krawędzi w
grafie? Podaj stopnie wierzchołków w poniŜszym grafie i sprawdź podany związek.
2. Wyznacz macierze sąsiedztwa dla grafów:
3. Napisz aplikację symulującą graf nieskierowany składający się z 4 wierzchołków. UŜytkownik
wprowadza dane w postaci macierzy sąsiedztwa a na podstawie tych danych:
a. Rysowany jest graf (format tekstowy)
b. Wyznaczane są stopnie poszczególnych wierzchołków
c. Wyznaczany jest najdłuŜszy cykl(e) w grafie
Bibliografia:
1. Świder K.: Algorytmy i struktury danych
2. Wikipedia, Wolna encyklopedia, http://www.wikipedia.pl
3. Serwis algorytmiczny, http://www.algorytm.org