Teoria grafów i algorytmy — Dijkstra, A*, minimalne drzewa rozpinające i układy sił skierowanych

Każda aplikacja mapowa, trasa dostawy paczek, układ sieci społecznościowej i ścieżki na płytce drukowanej sprowadzają się do algorytmów grafowych. Siedem interaktywnych symulacji przeprowadzi cię od klasycznego przeszukiwania najkrótszej ścieżki aż po NP-trudny problem komiwojażera — i pokaże leżącą u podstaw matematykę krok po kroku.

Najkrótsze ścieżki

Algorytm Edsgera Dijkstry z 1956 roku odwiedza węzły w kolejności skumulowanego kosztu od źródła, gwarantując optymalność na grafach o nieujemnych wagach krawędzi. Na siatce 1000 węzłów przetwarza w milisekundach; na rzadkich rzeczywistych sieciach drogowych obsługuje miliony węzłów przy odpowiednim strojeniu kolejki priorytetowej.

Złożoność Dijkstry kontra A*

Dijkstra: O((V + E) log V) z kolejką priorytetową na kopcu binarnym

A*: O(b^d) w najgorszym przypadku; blisko O(E log V) przy dobrej heurystyce h(v)

Gwarancja A*: jeśli h(v) jest dopuszczalna (h(v) ≤ prawdziwy koszt), wynik jest optymalny

f(v) = g(v) + h(v), gdzie g = koszt od startu, h = heurystyka do celu

Drzewa rozpinające i spójność

Minimalne drzewo rozpinające (MST) łączy wszystkie węzły z minimalną łączną wagą krawędzi i bez cykli. Algorytm Kruskala sortuje wszystkie krawędzie według wagi i korzysta ze struktury zbiorów rozłącznych (union-find); algorytm Prima rozbudowuje jedno drzewo od węzła początkowego. Oba dają to samo MST, ale różnią się wydajnością na gęstych i rzadkich grafach.

Optymalizacja kombinatoryczna

Niektóre problemy grafowe nie mają znanego algorytmu wielomianowego. Problem komiwojażera (TSP) — znalezienie najkrótszej trasy odwiedzającej każdy węzeł dokładnie raz — jest NP-trudny. Mimo to aproksymacje i heurystyki w praktyce działają zaskakująco dobrze.

Dlaczego A* przewyższa Dijkstrę w praktyce? Dijkstra rozszerza węzły równomiernie we wszystkich kierunkach. A* wykorzystuje heurystykę h(v), by ukierunkować rozszerzanie w stronę celu, eksplorując znacznie mniej węzłów. Na sieciach drogowych Dijkstra zazwyczaj eksploruje >50% grafu; A* z odległością euklidesową eksploruje <5% — bez utraty optymalności.

Ścieżki nauki

Ścieżka algorytmów klasycznych

  1. Wizualizator algorytmów sortowania
  2. Wyszukiwanie ścieżki — Dijkstra i A*
  3. Generowanie i rozwiązywanie labiryntów
  4. Minimalne drzewo rozpinające

Ścieżka zaawansowanych grafów

  1. Układ grafu sił skierowanych
  2. Problem komiwojażera
  3. Uczenie drzewa decyzyjnego

Omówione algorytmy

Dijkstra Przeszukiwanie A* BFS / DFS MST Kruskala MST Prima Union-Find 2-opt TSP Symulowane wyżarzanie Fruchterman-Reingold ID3 / CART Merge Sort Quicksort