Ciclo de peso negativo vs ciclo de peso máximo


8

Tengo problemas para entender por qué es fácil detectar ciclos de peso negativo (Bellman Ford) pero difícil de encontrar el ciclo de peso máximo en un gráfico no dirigido.

Si negamos el peso de cada borde, podemos encontrar fácilmente si hay ciclos con un peso total> 0. Sin embargo, no debe ser fácil encontrar si hay ciclos con un peso> 1 o podríamos repetir con 2, 3 , 4, etc. hasta que la respuesta sea no.

¿Es esto correcto? ¿Por qué es mucho más difícil detectar si existe un ciclo con peso> 1 y luego averiguar si hay un ciclo con peso> 0?

Respuestas:


2

No creo que sea muy sorprendente que encontrar un solo ciclo de peso negativo sea más fácil que encontrar el ciclo de mayor peso. Si me pide que encuentre un ciclo de peso negativo, puedo encontrar cualquiera y, si le doy lo que digo es una respuesta, es muy fácil para usted verificar la secuencia de vértices y ver que el peso realmente es negativo. Pero el ciclo de peso máximo se siente como un objeto muy especial. Incluso si afirmara haberlo encontrado, ¿cómo podría convencerlo de que no hay otro ciclo con un peso aún mayor?

Por otro lado, tal vez esta intuición no sea útil, ya que también es trivial verificar que un ciclo dado tenga un peso de al menos 1 o 2 o 17 ...


1

Esta es una excelente pregunta. No tengo una explicación completamente satisfactoria, pero déjame darte un comienzo.

En primer lugar, es importante comprender que no podemos resolver este problema simplemente enumerando todos los ciclos y verificando el peso de cada uno. Por qué no? Porque puede haber (y a menudo hay) exponencialmente muchos ciclos. Por lo tanto, simplemente enumerarlos necesariamente tomará tiempo exponencial, demasiado tiempo para ser factible.

Entonces, ¿cómo funciona Bellman-Ford? Funciona con algún truco inteligente que evita la necesidad de examinar individualmente cada ciclo uno por uno. En cambio, crea un resumen que resume algo sobre el efecto de todos los caminos y ciclos de longitud hasta . Efectivamente, para cada vértice , resume todas las rutas que comienzan en , terminan en y toman como máximo pasos. Como cada ciclo debe contener una ruta de esta forma, el resumen de alguna manera encapsula el efecto de todos los ciclos posibles.nortevvvn

¿Por qué no podemos usar esto para detectar (por ejemplo) si existe un ciclo de peso ? Es porque el resumen de Bellman-Ford incluye caminos que recorren el ciclo varias veces. Si el ciclo es de longitud , entonces incluirá rutas de longitud , es decir, rutas que recorren el ciclo aproximadamente veces. Por ejemplo, si tiene un ciclo de longitud , entonces el resumen incluye una ruta que recorre el ciclo tres veces.1knn/kn/3

¿Cuál es el efecto de caminar alrededor de un ciclo varias veces? Si desea distinguir los ciclos de peso positivo de los ciclos cuyo peso no es positivo, caminar por un ciclo varias veces no hace daño. Si el ciclo tiene un peso positivo, puede caminar varias veces y el peso total seguirá siendo positivo. Si el peso del ciclo no es positivo, puede caminar varias veces y el peso total seguirá siendo no positivo. Entonces, si lo único que nos importa es la diferencia entre el peso positivo y el no positivo, caminar por el ciclo varias veces no hace daño.

Pero ahora considere cómo cambian las cosas si lo que nos importa es la diferencia entre "peso " versus "peso ". Si tenemos un ciclo cuyo peso es y lo recorremos varias veces, el peso total podría convertirse en . Por ejemplo, si el peso del ciclo es y caminamos alrededor del ciclo tres veces, entonces el peso total de ese camino es , que es : comenzamos con un ciclo de peso y terminamos con una trayectoria de peso . Este hecho arruina totalmente a Bellman-Ford y lo hace inútil para verificar si existe un ciclo de peso1<1<111/21.51<11.51. (¿Ves la diferencia?)

Me doy cuenta de que esta no es una respuesta 100% satisfactoria. Te dice por qué Bellman-Ford no va a funcionar para resolver tu problema. Sin embargo, no le da ninguna intuición para explicar por qué esto es difícil en general (por ejemplo, por qué es difícil encontrar algún otro algoritmo para resolverlo). No tengo una buena intuición para eso, tal vez alguien más tenga una mejor explicación para ti. Mientras tanto, tal vez esto le permita comenzar a entender por qué este problema es difícil.


0

Decidir sigue siendo fácil para cualquier constante de borde e entero. Puedo verificar todos los ciclos de longitud en (suponiendo unidades de peso). Pero, ¿qué pasa si no es una constante, por ejemplo ? Ya no sería polinomial.wmiyosolhtCCCO(nc)Cc=n/2

Por otro lado, con el problema de decisión general (es decir, cuando no es constante) podemos decidir el problema del ciclo de Hamilton que es NP-Completo.C


Sí, pero esto no da ninguna intuición de por qué es difícil decidir el problema de decisión general. Sí, obviamente, hay una reducción en el ciclo hamiltoniano, pero eso no da ninguna intuición de por qué. Si lees la pregunta, está bastante claro que el autor está pidiendo intuición por qué esto es difícil cuando no es difícil encontrar un ciclo de peso positivo.
DW

Si lo sé. El autor de la pregunta parece confundido acerca de la diferencia entre decidir un número y decidir sobre una longitud determinada. Por favor, eche un vistazo a la pregunta en el último párrafo. Estoy tratando de corregirlo en esa parte. Ser más difícil o más fácil en términos de trazabilidad depende de esta distinción.
Parham

Comprobando todos los ciclos de longitud Ctampoco funciona si se permite que los bordes tengan un peso cero. De acuerdo, el peso cero a menudo se identifica sin borde, pero es fácil imaginar aplicaciones en las que un borde con peso cero no es lo mismo que ningún borde: por ejemplo, los bordes son segmentos de la carretera y el peso es el peaje que debe pagarse para ese segmento
David Richerby

0

Consideremos las versiones más simples de estos problemas donde los bordes no están ponderados.

  1. Dado un gráfico G, comprobar si G Tiene un ciclo.

  2. Dado un gráfico G y un numero k, comprobar si G tiene un ciclo de longitud al menos k.

El primero es fácil y se puede resolver con DFS. El segundo es NP-hard.


Veamos un problema aún más simple:

  1. Dado un gráfico G y dos vértices s y t, verifique si hay una ruta simple desde s a t en G.

  2. Dado un gráfico G y dos vértices s y t y un numero k, verifique si hay una ruta simple desde s a t en G de longitud al menos k.

Todos estos problemas son del mismo sabor. El superior es fácil, mientras que el inferior es NP-duro. Explicaré la diferencia para el último porque es más simple pero la misma explicación se aplica a los otros pares.

La razón por la cual las superiores son fáciles mientras que las inferiores no lo son es el resultado de la estructura de las respuestas a estos problemas.

Primero veamos el problema de encontrar un camino simple e intentemos resolverlo recursivamente. Si solo intentamos resolver este problema directamente, necesitaríamos hacer un seguimiento de los vértices que hemos usado hasta ahora:

SimplePath(s,t,G):= hay un camino desde s a t en G.

SimplePath(s,t,G) iff
s=t o para algunos uG SimplePath(s,u,Gt) y utG.

Si intentamos resolver el problema con este ingenuo algoritmo recursivo, llevará tiempo exponencial: ¡ existen exponencialmente muchas posibilidades para el conjunto de vértices no utilizados! Tenemos que ser más inteligentes.

¿Por qué obtuvimos exponencialmente muchas posibilidades? Debido a que estábamos tratando de encontrar un camino simple y hacer cumplir esta condición, necesitábamos hacer un seguimiento de los vértices no utilizados.

Bien, dejemos esa condición y veamos dónde podemos obtener:

Considere el problema de encontrar un camino (no necesariamente simple) de s a t. Dado que el camino no necesita ser simple, no necesitamos hacer un seguimiento de los vértices no utilizados. En otras palabras, el gráfico no cambia con el tiempo.

PathG(s,t):= hay un camino desde s a t.

PathG(s,t) iff
s=to
para algunosuG PathG(s,t) y utG.

Pero aún no hemos terminado. El problema es que no sabemos siPathG(s,u) es un problema menor que PathG(s,t). Entonces, esta solución recursiva podría terminar en un bucle y nunca terminar.

Para evitar esto, podemos agregar un parámetro adicional que asegure que el problema se reduzca: el número de bordes en la ruta.

PathG(s,t,k):= hay un camino desde s a t con a lo sumo k bordes

PathG(s,t,k) iff
k=0 y s=t o
k>0 y para algunos uG PathG(s,u,k1) y utG.

Ahora tenga en cuenta que hay un camino simple desde s a t si hay un camino desde s a t con a lo sumo nbordes En otras palabras:

SimplePath(s,t,G) iff PathG(s,t,n).

Los puntos esenciales aquí son:

  1. Cada camino simple (no trivial) desde s a t consiste en un camino simple desde s a algún vértice u y una ventaja ut.

  2. Podemos suponer que t no aparece en la ruta simple desde s a u.

  3. No necesitamos mantener explícitamente la lista de vértices no utilizados.

Estas propiedades nos permiten tener una recursión inteligente por la existencia de un problema de ruta simple.

Ahora, esto no se aplica al problema de encontrar una ruta de longitud al menos k. No sabemos cómo reducir el problema de encontrar una ruta simple de longitud al menosk a un subproblema más pequeño sin mantener la lista de vértices no utilizados. Esas propiedades nos permiten resolver la existencia del problema del camino de manera eficiente.

Cuando un gráfico no tiene un ciclo negativo, nos permiten resolver la existencia de una ruta de longitud como máximo k problema y la ruta más corta problemas simples de manera eficiente.

Sin embargo, no sostienen la existencia de un camino de longitud al menos k. Considere una gráfica con3 vértices s,u,t. w(su)=1000,w(st)=1000,w(ut)=10,w(tu)=10. El camino de longitud al menos1001 desde s a t contiene u y el camino de longitud al menos 1001 desde s a u contiene t. Por lo tanto, no podemos reducir una instancia del problema a una instancia más pequeña del problema sin dar explícitamente la lista de vértices no utilizados.

En otras palabras, no conocemos una recursión inteligente para la existencia de un camino simple de longitud al menos k problema mientras conocemos una recursión inteligente para la existencia de un camino simple.


Volviendo a la última parte de su pregunta, hay un problema con su argumento.

De hecho, es cierto que la existencia de un ciclo de longitud >k se puede resolver en tiempo polinómico para cualquier fijo k (es decir kno es parte de la entrada). (Similar a cómo se puede verificar si un gráfico no ponderado tiene un ciclo de longitudk a tiempo O(nk).)

sin embargo cuando k es parte de la entrada, esto ya no se mantiene ya que el tiempo de ejecución depende de k mal.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.