Algorytmy przeszukiwania grafów pojawiają się wszędzie. Bez nich nie działałaby Twoja ulubiona wyszukiwarka internetowa, a swoje „ścieżki w grafie” prawdopodobnie optymalizujesz podświadomie, na przykład planując swój dzień. Połączenia między Tobą, Twoimi przyjaciółmi i rodziną również tworzą graf, który gorączkowo przeszukujemy podczas spotkań towarzyskich.
Skoro algorytmy przeszukiwania grafów mają wiele zastosowań w codziennym życiu, nie powinno nas dziwić, że wiele zadań olimpijskich z matematyki można również rozwiązać, wykorzystując tę ideę.
Przeszukiwanie w głąb
Zanim przejdziemy dalej, omówmy najprostszy algorytm przeszukiwania grafów – przeszukiwanie w głąb, w skrócie DFS (depth first search).
Możemy o nim myśleć jak o „spacerze” po grafie. Podczas wykonywania
algorytmu przechowujemy informację o tym, czy dany wierzchołek został
już odwiedzony. Zaczynamy od wybrania wierzchołka początkowego. Kiedy
w trakcie wykonywania algorytmu znajdziemy się w jakimś wierzchołku
-
Oznacz wierzchołek
jako odwiedzony. -
Dla każdego sąsiedniego wierzchołka
aktualnego wierzchołka jeśli nie został jeszcze odwiedzony – rekurencyjnie wykonaj tę procedurę dla -
Po zbadaniu wszystkich sąsiednich wierzchołków
wróć do poprzedniego wierzchołka – tego, z którego przyszliśmy do
O algorytmie DFS można myśleć analogicznie do zwiedzania. Wyobraź sobie, że jesteś turystą w tętniącym życiem mieście, trzymasz w rękach mapę i chcesz zobaczyć każdą ukrytą perełkę, jaką to miasto ma do zaoferowania. Zaczynasz od znanego muzeum, chłonąc sztukę i historię, po czym rozglądasz się za kolejnym, jeszcze nieodwiedzonym miejscem. Jeśli znajdziesz nową kawiarnię, urokliwą alejkę lub inny zabytek, udajesz się tam, ciesząc się nowymi widokami i dodając je do swojej „listy odwiedzonych miejsc”. Gdy dojdziesz do punktu, w którym wszystko w okolicy zostało zwiedzone, czas wrócić – cofnąć się do ostatniego miejsca, które miało jeszcze niezbadane ścieżki. Stamtąd kontynuujesz przygodę, odkrywając nowe ciekawostki i poruszając się naprzód, aż w pełni zwiedzisz wszystkie możliwe miejsca. Ta metoda zwiedzania zapewnia, że nie ominiesz żadnej lokalizacji. W końcu odwiedzisz całe miasto, nie pozostawiając żadnego zabytku nieodkrytym ani żadnego zakątka niezbadanym! W przypadku grafu spójnego dzieje się dokładnie to samo – po wykonaniu DFS stanie się on „całkowicie zwiedzony”. Łatwo zauważyć, że w czasie wykonywania algorytmu każdy wierzchołek ma trzy możliwe stany – albo nieodwiedzony (jeszcze nieosiągnięty przez DFS), odwiedzony (osiągnięty, ale nadal badany), albo całkowicie zbadany (wszyscy jego sąsiedzi zostali zbadani).
Powrót do zadań
Korzystając z algorytmu DFS, możemy podzielić krawędzie grafu na
krawędzie drzewowe, zwane również krawędziami rozpinającymi (te, które są przechodzone
podczas „spaceru”, tworząc ukorzenione drzewo rozpinające) oraz
krawędzie wsteczne
(pozostałe krawędzie, które zamykają cykle). Pomocne jest myślenie
o krawędziach drzewowych jako skierowanych w dół, a o krawędziach
wstecznych jako skierowanych w górę. Dlaczego takie podejście do analizy
grafu jest pomocne? Aby to zobaczyć, udowodnijmy najważniejszą własność
dotyczącą przeszukiwania grafu algorytmem DFS. Załóżmy, że mamy spójny
graf
Naszym celem jest pokazanie, że dla każdej krawędzi
-
Jeśli DFS przejdzie z
do używając to jest krawędzią drzewową. -
Jeśli przeszukiwanie nie przejdzie do
z używając krawędzi to musiało zostać już odwiedzone, gdy ta krawędź była rozważana. Mogło to się zdarzyć jedynie wtedy, gdy zostało osiągnięte i zbadane wcześniej, podczas przeszukiwania jakiejś innej gałęzi wychodzącej z
W obu przypadkach
Kluczową zaletą drzewa DFS jest to, że upraszcza ono analizę grafu. Zamiast zajmować się wszystkimi rodzajami krawędzi, możemy skupić się na strukturze drzewa z kilkoma dodatkowymi krawędziami łączącymi przodków z potomkami. Dzięki temu graf staje się znacznie łatwiejszy do analizy.
Rozważmy następujące zadanie:
Zadanie:
Niech
Rozwiązanie:
Jeśli
Załóżmy, że
Zdefiniujmy głębokość wierzchołka
Zadanie (LXVII Olimpiada Matematyczna, etap drugi):
Dany jest spójny, nieskierowany graf z parzystą liczbą krawędzi.
Udowodnij, że jego krawędzie można połączyć w pary w taki sposób, że
każda para jest połączona ze sobą dokładnie jednym wierzchołkiem (innymi
słowy – takie pary tworzą ścieżkę długości dwa).
Rozwiązanie:
Wykonajmy algorytm DFS na grafie, zaczynając od dowolnego wierzchołka
-
Wybierz nieprzetworzony wierzchołek
o największej głębokości, który nie jest korzeniem. -
Spójrz na krawędzie wychodzące z
które nie zostały jeszcze usunięte. Są trzy typy takich krawędzi:-
krawędzie wsteczne łączące
z jego przodkami, -
krawędzie drzewowe łączące
z jego dziećmi, -
jedna krawędź łącząca
z jego rodzicem przez krawędź drzewową.
Jeśli liczba nieusuniętych krawędzi jest parzysta, łączymy je w pary dowolnie i usuwamy wszystkie. W przeciwnym razie łączymy je w pary tak, aby pozostała tylko krawędź z
do jego rodzica. -
-
Oznacz
jako przetworzony.
Pozostaje jeszcze połączyć w pary krawędzie wychodzące z
Teraz należy powiedzieć kilka słów o poprawności tej konstrukcji.
Podczas rozważania wierzchołka
O specjalnym wierzchołku w drzewach
Każdy wie, czym są drzewa. Rosną w parkach (jakoś odwrócone – dlaczego
korzeń jest na dole?) i na ogół są w każdym kierunku symetryczne –
rzadko zdarza się, by jedna gałąź miała widocznie więcej liści i gałązek
niż inne. Czy tak samo jest w przypadku drzew grafowych? Okazuje się, że
tak. Bardziej formalnie, wykażemy, że w każdym drzewie z
Postaramy się znaleźć taki wierzchołek w sposób rekurencyjny.
Przypuśćmy, że ukorzeniliśmy nasze drzewo w pewnym wierzchołku
W związku z tym możemy przejrzeć wszystkie sąsiednie wierzchołki
Zauważmy, że centroid nie musi być koniecznie jedyny. Na przykład
w grafie składającym się z dwóch wierzchołków połączonych krawędzią oba
wierzchołki są centroidami – każdy z nich ma jedno poddrzewo o rozmiarze
Zadanie:
Załóżmy, że w pewnym kraju, w którym będzie odbywał się obóz MBL, mamy
Szkic rozwiązania:
W tym zadaniu mamy dane drzewo z
Kolejne zadanie, tym razem pozostawione jako ćwiczenie dla Czytelnika:
Zadanie (na podstawie zadania z drugiego etapu XXX Olimpiady
Informatycznej):
Antek i Marysia grają w grę na drzewie. Początkowo wszystkie wierzchołki
są białe, z wyjątkiem jednego wierzchołka
Podsumowanie
Jak mogliśmy zobaczyć, istnieje wiele zastosowań algorytmu DFS i centroidów w problemach olimpijskich z matematyki. Jednak DFS to znacznie więcej – używamy algorytmów przeszukiwania grafu niemal nieustannie, nawet nie zdając sobie z tego sprawy! Następnym razem, gdy będziesz rozwiązywać sudoku lub spieszyć się do szkoły czy pracy, pamiętaj, że w rzeczywistości rekurencyjnie podążasz jakąś ścieżką w grafie, mając nadzieję, że znajdziesz tę właściwą.