Localizando pelo menos dois caminhos do mesmo comprimento em um gráfico direcionado


20

Suponhamos que temos um gráfico dirigido e dois nós e . Gostaria de saber se já existem algoritmos para calcular o seguinte problema de decisão:G=(V,E)AB

Existem pelo menos dois caminhos entre e do mesmo comprimento?AB

E a complexidade? Posso resolvê-lo em tempo polinomial?


Gostaria de adicionar uma nova restrição ao gráfico, talvez o problema seja mais solucionável. Na matriz de adjacência, todas as colunas não estão vazias. Portanto, todo nó tem pelo menos uma seta na entrada e também há pelo menos um nó conectado a ele. Portanto, se o nó é o ésimo nó, é uma aresta no gráfico.i(i,i)


Você quis dizer caminhos simples? (visitando cada nó no máximo uma vez). Também é permitido que eles tenham um nó interno comum?

1
não, não há restrição nos caminhos. você pode fazer um loop, se quiser.
Paolo Parisen T.

Observação fácil é esta: se houver apenas um caminho simples entre e esse caminho simples estiver conectado a no máximo um loop, você poderia simplesmente dizer , se houver pelo menos dois loops de comprimento diferente conectados a esse caminho simples , você poderia dizer que sim, .... (acho que coisas semelhantes são úteis e você pode provar isso), mas no caso de caminhos simples disjuntos (se durante a prova disso você encontrou caminhos simples desarticulados), é o NPC. N OA,BNo

1
@ RM: Eu não vejo isso como uma duplicata. Pedir todas as caminhadas é uma operação que consome muito tempo (em geral, há um número infinito de caminhadas), enquanto o OP está pedindo dois caminhos (simples), nem todos os passeios.
26412 Dave Clarke

Respostas:


10

Considere um gráfico , queremos saber se existem dois caminhos diferentes de a do mesmo comprimento. O que fazer? Simples: codifique dois caminhos em um. Defina o gráfico com os vértices . Você faz um passo em , fazendo duas etapas independentes no . O bit adicional informa se os dois caminhos já se separaram.A B G V × V × { 0 , 1 } G GGABGV×V×{0,1}GG

Formalmente, existe uma aresta em se se , em e .L ' i i ' j j ' L e ' = e ( i , i ' ) ( J , J ' )(i,j,e)(i,j,e)GiijjGe=e(i,i)(j,j)

O algoritmo verifica se existe um caminho para em , que é( B , B , 1 ) G O ( V 4 ) , ou algo como O ( ( V + E ) 2 ) .(A,A,0)(B,B,1)GO(V4)O((V+E)2)

Se você concordar que esse algoritmo está correto, como conseqüência, o caminho em tem um comprimento máximo de 2 n 2 , portanto, possíveis "colisões de caminho" devem ocorrer o mais tardar nesse comprimento. Você pode obter um algoritmo O ( V ω log V ) a partir desta observação, onde ω é a complexidade da multiplicação da matriz (pergunte se você precisa de um spoiler ...).G2n2O(VωlogV)ω

Sinto fortemente que existe um algoritmo , que utiliza mais a estrutura do problema.O(V+E)


3
Isso é elegante.
Raphael

4

Provavelmente tenho uma resposta para esse problema, mas não tenho certeza de que funcione.

Não é importante "encontrar" os dois caminhos, a única coisa importante é "saber" se eles existem ou não. Eu não acho que este seja um problema completo do NP.

Portanto, tome a matriz de adjacência . Podemos facilmente supor que ele seja preenchido com valor 0,1. (0 = sem aresta; 1 = existe uma aresta) Vamos usar a seguinte álgebra com 3 valores (0,1,2), onde tudo funciona como de costume, exceto: 2 + <algo> = 2 ; 2 <o que for maior que 0> = 2A2+<something>=22<whatever greater than 0>=2

Portanto, se existem dois caminhos com o mesmo comprimento de , espero que exista um valor p tal que ( A p ) i , j = 2 .i,jp(Ap)i,j=2

Seja o número de vértices no gráfico (ou, digamos, que A tenha dimensão n × n ). Não sei o valor de p , mas se eu repetir A multiplicando-se por no máximo n 2, devo encontrar a resposta. (assim, p < n 2 ) (o sentido é que i vá Um , em seguida, verificar i Um 2 , então i vá Um 3 e assim por diante ...)nAn×npAn2p<n2AA2A3

aqui está a minha argumentação:

  • se os dois caminhos são caminhos simples, bem, funciona; se houver, no máximo eu tenho que repetir vezes.n
  • Se houver pelo menos um ciclo controlado ou se houver um caminho com dois ciclos, bem, tenho que encontrar o mínimo múltiplo comum (LCM). é um valor maior, com certeza, e em menos de n 2 vezes, se houver, eu devo encontrá-los.n2n2
  • Se os dois caminhos são dois caminhos distintos, ambos com um ciclo, é mais ou menos semelhante a encontrar uma solução para essas duas equações: , onde m e k são o comprimento desses dois pontos distintos ciclos. Multiplicação de matrizes A q , como definido acima, diz "existe um caminho de i a j cujo comprimento é q ?" Portanto, se A q é maior que 1 , significa que há mais caminhos que levam de i a j . Ao iterar a matriz nα+βm=γ+δkmkAqijqAq1ij vezes passamos por toda a combinação possível de δ e β . Com efeito, L C H ( um , b ) é definida como ( a * b ) / G C D ( um , b ) e nenhum ciclo pode ser maior do que n .n2δβLCM(a,b)(ab)/GCD(a,b)n

Paro para repetir uma vez que encontrei .(Ap)i,j=2

estou errado?


Tentei o mesmo e encontrei alguns problemas / incertezas: 1) E se os caminhos estiverem conectados a mais de um ciclo? Você precisa "verificar" todas as combinações (na pior das hipóteses, cada nó repousa exponencialmente em muitos ciclos!), Explodindo o limite superior ou é suficiente considerar apenas um para cada um? 2) Devido às constantes compensações e γ , o LCM é realmente um limite superior? αγ
Raphael

A propósito, não há necessidade de uma álgebra descolada: basta parar no momento em que você calcular um como entrada da matriz. 2
Raphael

n2nαγLCM(a,b)+α+γ<ab+α+γα+γ+a+b<nab+α+γn2
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.