2020-04-08
Znalezienie najkrótszej ścieżki w skierowanym grafie acyklicznym (DAG).
Graf , gdzie:
Dla ustalonego wierzchołka startowego długość najkrótszej ścieżki do wszystkich wierzchołków oznaczana przez
Ważną własnością grafu DAG jest możliwość jego „linearyzacji”, czyli ustawienia wierzchołków w takiej kolejności , że krawędzie będą zawsze skierowane od wcześniejszych wierzchołków do późniejszych .
Dzięki tej własności chcąc policzyć długość najkrótszej ścieżki od wierzchołka startowego do zadanego wierzchołka wystarczy użyć wcześniej obliczonych dla każdego wierzchołka :
Zauważmy, że każdy wierzchołek odpowiada pod-problemowi, więc jeśli rozwiążemy te pod-problemy od najmniejszych do największych (od pierwszych w ustalonej kolejności do ostatnich) zapamiętując i wykorzystując ich rozwiązania to otrzymamy rozwiązanie problemu znalezienia najkrótszych dróg w DAG.
for each v in V:
d(v_s, v) = Infinity
d(v_s, v_s) = 0
for each v in V \ {v_s} in linearized order:
d(v_s, v) = min{ d(v_s, u) + c(u, v): (u,v) in E }
Problem obliczania najkrótszych ścieżek w DAG leży u podstawy wszystkich algorytmów stworzonych przy użyciu metodologii programowania dynamicznego, ale na ogół DAG nie jest zadany explicite i jednym z zadań jest poprawne go zdefiniowanie.