Oto akcyzy:wykres - Jak znaleźć minimalny cykl reżyserii (minimalna masa całkowita)?
Niech G być ważone skierowane wykres z n a m wierzchołków krawędzi, gdzie wszystkie krawędzie mają pozytywny wagi. Kierowany cykl jest skierowaną ścieżką, która rozpoczyna się i kończy w tym samym wierzchołku i zawiera co najmniej jedną krawędź. Podaj algorytm O (n^3), aby znaleźć ukierunkowany cykl w G minimalnej masy całkowitej. Częściowy kredyt zostanie przyznany za algorytm O ((n^2) * m).
Oto mój algorytm.
Wykonuję . Za każdym razem, gdy znajduję back edge
, wiem, że mam ukierunkowany cykl.
Następnie tymczasowo przejdę wstecz wzdłuż parent array
(dopóki nie przejdę przez wszystkie wierzchołki w cyklu) i obliczyć wartość total weights
.
Następnie porównuję total weight
tego cyklu z min
. min
zawsze przyjmuje minimalne masy całkowite. Po zakończeniu DFS zostanie również znaleziony nasz minimalny ukierunkowany cykl.
Ok, a następnie o złożoności czasu.
Szczerze mówiąc, nie znam złożoności czasu mojego algorytmu.
Dla DFS przejście trwa 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ć jednego z jego przodków, a zatem tworzy cykl. Gdy zostanie znaleziony cykl, potrzeba O (n) do podsumowania całkowitej masy.
Uważam, że całkowity czas to O (m + n * n). Ale oczywiście jest źle, jak stwierdzono w akcyzie, optymalny czas to O (n^3), a normalny czas to O (m * n^2).
Czy ktoś może mi pomóc z:
- Czy mój algorytm jest prawidłowy?
- Jaka jest złożoność czasu, jeśli mój algorytm jest poprawny?
- Czy istnieje lepszy algorytm dla tego problemu?
Nie jest jasne, o co prosisz. Czy potrzebujesz pomocy w określeniu złożoności czasu? – Keeblebrox
OK, zredagowałem moje pytanie –
Twój algorytm jest niekompletny. Co robisz, gdy napotkasz wierzchołek, który już widziałeś? –