Aquí se presenta una especial:graph - ¿Cómo encontrar el ciclo dirigido mínimo (peso mínimo total)?
Sea G un grafo dirigido ponderado con n vértices y m bordes, donde todos los bordes tienen un peso positivo. Un ciclo dirigido es un camino dirigido que comienza y termina en el mismo vértice y contiene al menos un borde. Proporcione un algoritmo O (n^3) para encontrar un ciclo dirigido en G del peso total mínimo. Se dará crédito parcial para un algoritmo O ((n^2) * m).
Aquí es mi algoritmo.
Hago un DFS
. Cada vez que encuentro un back edge
, sé que tengo un ciclo dirigido.
Luego iré temporalmente hacia atrás por el parent array
(hasta que viaje a través de todos los vértices en el ciclo) y calcule el total weights
.
Luego comparo el total weight
de este ciclo con min
. min
siempre toma el peso total mínimo. Después de que el DFS finaliza, también se encuentra nuestro ciclo dirigido mínimo.
Bien, entonces sobre el tiempo la complejidad.
Para ser sincero, no sé la complejidad temporal de mi algoritmo.
Para DFS, el recorrido toma O (m + n) (si m es el número de aristas yn es el número de vértices). Para cada vértice, podría apuntar a uno de sus antepasados y así formar un ciclo. Cuando se encuentra un ciclo, se necesita O (n) para resumir los pesos totales.
Así que creo que el tiempo total es O (m + n * n). Pero obviamente está mal, como se establece en el impuesto especial, el tiempo óptimo es O (n^3) y el tiempo normal es O (m * n^2).
¿Puede alguien ayudarme con:
- ¿Es mi algoritmo correcto?
- ¿Cuál es la complejidad del tiempo si mi algoritmo es correcto?
- ¿Hay algún algoritmo mejor para este problema?
No está claro con qué está pidiendo ayuda. ¿Estás pidiendo ayuda para determinar tu complejidad de tiempo? – Keeblebrox
Ok, edité mi pregunta –
Su algoritmo está incompleto. ¿Qué haces si encuentras un vértice que ya has visto? –