Hier ist ein Verbrauch:Grafik - Wie finde ich den minimalen gerichteten Zyklus (minimales Gesamtgewicht)?
wären G a gewichtete gerichtete Graphen mit n Ecken und Kanten m sein, wobei alle Kanten positives Gewicht haben. Ein gerichteter Zyklus ist ein gerichteter Pfad, der am selben Eckpunkt beginnt und endet und mindestens eine Kante enthält. Geben Sie einen O (n^3) -Algorithmus an, um einen gerichteten Zyklus in G mit minimalem Gesamtgewicht zu finden. Ein Teilguthaben wird für einen O ((n^2) * m) -Algorithmus vergeben.
Hier ist mein Algorithmus.
Ich mache eine DFS
. Jedes Mal, wenn ich eine back edge
finde, weiß ich, dass ich einen gerichteten Zyklus habe.
Dann werde ich vorübergehend rückwärts gehen entlang der parent array
(bis ich durch alle Ecken in den Zyklus reisen) und berechnen Sie die total weights
.
Dann vergleiche ich die total weight
dieses Zyklus mit min
. min
nimmt immer die minimalen Gesamtgewichte. Nachdem das DFS beendet ist, wird auch unser minimaler gesteuerter Zyklus gefunden.
Ok, dann über die Zeit Komplexität.
Um ehrlich zu sein, ich kenne die Zeit Komplexität meines Algorithmus nicht.
Für DFS verwendet die Traversierung O (m + n) (wenn m die Anzahl der Kanten und n die Anzahl der Ecken ist). Für jeden Knoten kann er auf einen seiner Vorfahren verweisen und somit einen Zyklus bilden. Wenn ein Zyklus gefunden wird, wird O (n) benötigt, um die Gesamtgewichte zusammenzufassen.
Also ich denke, die Gesamtzeit ist O (m + n * n). Aber offensichtlich ist es falsch, wie in der Verbrauchssteuer angegeben, ist die optimale Zeit O (n^3) und die normale Zeit ist O (m * n^2).
Kann mir jemand helfen mit:
- Ist mein Algorithmus korrekt?
- Was ist die zeitliche Komplexität, wenn mein Algorithmus korrekt ist?
- Gibt es einen besseren Algorithmus für dieses Problem?
Es ist nicht klar, um was Sie bitten um Hilfe. Fragen Sie nach Hilfe, um Ihre zeitliche Komplexität zu bestimmen? – Keeblebrox
Ok, ich habe meine Frage bearbeitet –
Ihr Algorithmus ist unvollständig. Was machst du, wenn du auf einen Scheitel triffst, den du bereits gesehen hast? –