graph - Jak znaleźć minimalny cykl kierowany (minimalna masa całkowita)?

Oto akcyza:

Niech G będzie ważonym grafem ukierunkowanym z n wierzchołkami i krawędziami m, gdzie wszystkie krawędzie mają masę dodatnią. Cykl kierowany to ukierunkowana ścieżka, która zaczyna się i kończy przy tym samym wierzchołku i zawiera co najmniej jedną krawędź. Daj algorytm O (n ^ 3), aby znaleźć ukierunkowany cykl w G o minimalnej masie całkowitej. Częściowy kredyt zostanie przyznany za algorytm O ((n ^ 2) * m).

Oto mój algorytm.

RobięDFS. Za każdym razem, gdy znajdęback edge, Wiem, że mam ukierunkowany cykl.

Potem tymczasowo cofnę się wzdłużparent array (dopóki nie przejdę przez wszystkie wierzchołki w cyklu) i nie obliczętotal weights.

Następnie porównujętotal weight tego cyklu zmin. min zawsze pobiera minimalną całkowitą wagę. Po zakończeniu DFS znajduje się także nasz minimalny cykl kierowany.

Ok, to o złożoności czasu.

Szczerze mówiąc, nie znam złożoności czasowej mojego algorytmu.

W przypadku DFS przejście wykonuje O (m + n) (jeśli m jest liczbą krawędzi, a n jest liczbą wierzchołków). Dla każdego wierzchołka może wskazywać na jednego z jego przodków, tworząc w ten sposób cykl. Gdy cykl zostanie znaleziony, O (n) zajmuje podsumowanie całkowitej masy.

Myślę więc, że całkowity czas to O (m + n * n). Ale oczywiście jest źle, jak stwierdzono w akcyzie, optymalnym czasem jest O (n ^ 3), a normalnym czasem jest O (m * n ^ 2).

Czy ktoś może mi pomóc:

Czy mój algorytm jest poprawny?Jaka jest złożoność czasu, jeśli mój algorytm jest poprawny?Czy jest jakiś lepszy algorytm dla tego problemu?

questionAnswers(4)

yourAnswerToTheQuestion