Parece que tu problema está en . Aquí hay un algoritmo.NL
En primer lugar, nondeterministically adivinar un camino de a . Si adivinas incorrectamente, rechaza . Llame a este algoritmo .t AstA
Considere el siguiente algoritmo no determinista , que determina si hay al menos dos rutas. Dado un gráfico , para todos los pares de aristas distintas , adivine una ruta de a que incluya pero no , luego adivine una ruta de a que incluya pero no . Si las conjeturas son correctas, acepte . Si no hay aceptación para todas las opciones de y , rechazar . Nota es implementable en espacio de registro no determinista.s , t e , f s t e f s t f e e f BBs,te,fstefstfeefB
Ahora, el conjunto es el conjunto de gráficos - con al menos dos rutas de a . Debido , el complemento de es también en , es decir, podemos determinar si y tienen menos de dos caminos, en logspace no determinista.s t s t N L = c o N L B N L s tL(B)ststNL=coNLBNLst
El algoritmo final es: "Ejecutar Si acepta, ejecute el complemento de y envíe su respuesta".A BAAB
No sé de una referencia.
ACTUALIZACIÓN: Si realmente desea una referencia, consulte el primer párrafo de la Sección 3 de este documento . Pero esta es probablemente solo una de las muchas referencias que citan esta consecuencia. Sería más razonable llamar al resultado "folklore" en lugar de citar un artículo que lo menciona.
ACTUALIZACIÓN 2: Supongamos que desea determinar si hay una ruta simple única. En ese caso, el algoritmo no tiene que cambiar: si hay una ruta, entonces hay una ruta simple. Creo que la siguiente modificación trabajará para el algoritmo .BAB
Queremos reescribir el algoritmo para que acepte si hay al menos dos rutas simples.B
Primero considere el siguiente algoritmo de tiempo polinómico para el problema. Encontrar un camino más corto desde a . Para cada borde en , verifique si hay otra ruta - que no pase por . Si encuentra ese camino, acepte . Si nunca encuentras otro camino, rechaza . Debido a que es el más corto, no tiene un ciclo, y si hay otra ruta que no usa algún borde de , entonces hay otra ruta que es simple y no usa algún borde des t e P s t e P P PPstePstePPP. (Este algoritmo se usa para el problema del "segundo camino más corto").
Implementaremos este algoritmo en . Si tuviéramos un algoritmo para consultar los bordes en una ruta fija , podríamos implementar lo anterior en un espacio de registro no determinista: iterando a través de todos los bordes en , adivine una ruta - y verifique eso para cada borde visitado en el camino , ninguno de ellos es igual a .NLNLePePste
Entonces, lo que necesitamos es un "oráculo de ruta", un algoritmo con la propiedad: dado , en cada ruta de cálculo, el algoritmo informa el borde en una ruta - fija particular , o rechazar . Podemos obtener un oráculo de ruta usando para aislar la primera ruta lexicográfica.NLi=1,…,nistNL=coNL
Aquí hay un bosquejo del oráculo del camino.
Encuentre , la longitud del camino más corto de a , probando todos usando .kstk=1,…,nNL=coNL
Establezca las variables , , .u:=sx:=1j:=k
Para todos los vecinos de en orden lexicográfico,vu
Determine si existe o no una ruta desde hasta de longitud (utilizando el resultado ). Más precisamente, ejecute el algoritmo no determinista para conectividad - (de longitud ) y el algoritmo para su complemento, simultáneamente. Cuando uno de ellos acepta, vaya con su respuesta (debe ser correcta; ambos no pueden aceptar). Si ambos rechazan, rechace .t j - 1 N L = c o N L s t j - 1vtj−1NL=coNLstj−1
Si no hay camino, continúe con el próximo vecino. Si has agotado a todos los vecinos, rechaza .
Si hay un camino, a continuación, si , la salida como el ésimo borde en el camino de a . De lo contrario, incremente , disminuya , establezca e inicie el ciclo for nuevamente si .( u , v ) i s t x j u : = v v ≠ tx=i(u,v)istxju:=vv≠t
Si después de alcanzar salida mal (lo dado era demasiado grande).t i ix<itii
Dado , este algoritmo da salida a ya sea el ésimo borde en el camino lexicográficamente más corto de a , o rechazos.i P s tiiPst