Enumerar todos los pares de caminos disjuntos

10

Dado un grafo dirigido y dos vértices . Un par de rutas simples de a es un borde disjunto si no comparten un borde.s , t V p 1 , p 2 s tG=(V,E)s,tVp1,p2st

Utilizando el flujo máximo, es fácil decidir si hay un par de caminos disjuntos borde de a . Ahora, hay un algoritmo de retardo de tiempo polinómico para enumerar todos los pares de ruta disjunta borde de a ?t s tstst

Aficionado
fuente
1
No, ya que puede haber exponencialmente muchos de estos caminos.
Kaveh
66
@Kaveh: Creo que un "algoritmo de retraso polinómico" puede tomar tiempo exponencial, siempre que el retraso entre salidas sea polinomialmente largo. Por ejemplo, hay un algoritmo de retraso polinómico que enumera todas las camarillas máximas en orden creciente, a pesar de que el número de camarillas máximas es exponencial.
Robin Kothari
3
¿Es posible incluir la explicación del retraso polinómico en la pregunta? No estaba familiarizado con eso hasta que leí el comentario de Robin.
Artem Kaznatcheev
@ Robin, tienes razón, no presté atención a la palabra "retraso".
Kaveh

Respuestas:

6

Creo que la respuesta de Artem Kaznatcheev es correcta, pero no da espacio polinomial. Así que aquí hay un enfoque diferente que debería funcionar un poco mejor a ese respecto.

Usando el flujo máximo es posible resolver un problema un poco más general: encontrar un par de caminos disjuntos de borde desde algunos dos vértices {s1, s2} a algún otro par de vértices {t1, t2}, pero sin controlar qué vértice fuente está conectado a qué destino vértice.

Supongamos que tenemos un gráfico G y vértices s1, s2, t1, t2 para los que queremos enumerar todos los pares de caminos. Encuentre un solo par de rutas P1, P2 y deje que e = (s1, v) sea el primer borde en una de esas rutas. Luego podemos dividir el espacio del problema en dos subproblemas: los pares de caminos que usan e son los mismos que los caminos de {v, s2} a {t1, t2} en G-s1, y los pares de caminos que no usan e son los mismos que los caminos de {s1, s2} a {t1, t2} en Ge. Recurre en estos dos subproblemas y (para evitar duplicaciones) solo informa una ruta cuando estás en la parte inferior de la recursión.

David Eppstein
fuente
1
¿Es obvio que el algoritmo es un retraso polinómico si esperamos hasta el final de la recursión?
Artem Kaznatcheev
La recursión toma polinómicamente muchos niveles para tocar fondo (ya que cada nivel elimina algo del gráfico), y cada rama regresa inmediatamente (porque no puede encontrar un par de caminos) o toca fondo y devuelve algo, así que sí, solo toma retraso polinomial.
David Eppstein
5

Esta es la primera vez que leo sobre algoritmos de retraso polinómico, por lo que no estoy 100% seguro de mi respuesta, pero creo que algo como lo siguiente debería funcionar.

Elija alguna convención para representar rutas que tengan un orden total natural definido en ella. (Un ejemplo sería solo enumerar los vértices de la ruta y el orden lexicográficamente). Elija su estructura de datos D in situ favorita que admita la búsqueda e inserción logarítmica (digamos un árbol rojo-negro). Deja que G sea ​​tu gráfico<DG

Definir un algoritmo :F


:F(s,t,sol,re)

(aquí D significa una referencia a una estructura de datos D in situ )rere

  1. ejecutar su algoritmo de tiempo poli para el retorno de un par de caminos de borde-disjuntos con P < Q de s a t .(PAG,Q)PAG<Qst
  2. Si no se encuentra en D .(PAG,Q)re

    2.1. Inserte en D (y haga salir si se supone que debe salir mientras se ejecuta el algoritmo).(PAG,Q)re

    tuvmi(PAGQ)F(s,t,sol-{tuv},re)


res,tV(sol)s<tstF(s,t,sol,re)

PAGSPAGUNACmiPAGSPAGUNACmi

Artem Kaznatcheev
fuente
2

O(metro)

Rui Ferreira
fuente