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