Streszczenie wykładu 12
Tematem tego wykładu są algorytmy
grafowe z jednej strony i
kontynuacja przykładów algorytmów zachłannych, z drugiej strony.
Problem, którym będziemy się zajmować, to konstrukcja minimalnego
drzewa rozpinającego grafu. Z problemem tym mozna się spotkać, gdy
rozwiązujemy, na przykład, zadanie okablowania sieci komputerowej:
chcemy by dowolne dwa komputery były połączone (niekoniecznie
bezpośrednio) i by koszt budowy całej sieci był jak najmniejszy.
Drzewo, którego wierzchołkami są komputery, a krawędziami odcinki
kabla, jest dobrym rozwiązaniem problemu. Drzewo jest takim podgrafem,
który gwarantuje, ze dowolne dwa węzły są połączone drogą. Jeśli
dodatkowo ocenimy koszt budowy poszczególnych odcinków (czytaj:
krawędzi) i zadbmy o to, by suma kosztów była jak najmnijsza, to będzie
to bardzo dobre rozwiązanie zadania.
Jednym z najbardziej znanych
algorytmów rozwiązujących problem minimalnego drzewa rozpinającego jest
algorytm Kruskala. Jest to
jeszcze jeden przykład algorytmu zachłannego. Koszt tego algorytmu
zalezy istotnie od szczegółów implementacyjnych. W punkcie czwartym
wykładu
omówimy strukturę danych, Find-Union, ktorej uzycie pozwala oszacować
koszt algorytmu Kruskala przez O(m lg n), gdzie m jest
liczbą krawędzi, a n liczbą wierzchołków grafu.
W punkcie drugim wrócimy ponownie do algorytmów przeglądania grafu BFS
i DFS, jako, ze mozna ich uzyć do znajdowania drzewa rozpinającego
grafu i do badania spójności, która to własność, jest warunkiem
koniecznym istnienia drzewa rozpinającego grafu.