Trovare almeno due percorsi della stessa lunghezza in un grafico diretto


20

Supponiamo di avere un grafo diretto e due nodi e . Vorrei sapere se esistono già algoritmi per il calcolo del seguente problema decisionale:A BG=(V,E)AB

Ci sono almeno due percorsi tra e della stessa lunghezza?BAB

E la complessità? Posso risolverlo in tempo polinomiale?


Vorrei aggiungere un nuovo vincolo al grafico, forse il problema è più risolvibile. Sulla matrice di adiacenza, ogni colonna non è vuota. Quindi, ogni nodo ha almeno una freccia sull'input e c'è anche almeno un nodo collegato a se stesso. Quindi se il nodo è l' -esimo nodo, allora è un bordo nel grafico.( io , io )i(i,i)


Intendevi percorsi semplici? (visitando ogni nodo al massimo una volta), Inoltre, possono avere un nodo interno comune?

1
no, non ci sono restrizioni sui percorsi. puoi fare un ciclo, se vuoi.
Paolo Parisen T.

Facile l'osservazione è questa: se c'è solo un semplice percorso tra A,B , e questo semplice percorso è collegato ad al massimo un ciclo, si potrebbe semplicemente dire No , se non v'è di almeno due circuiti di diversa lunghezza collegati a questa semplice percorso, potresti dire di sì, .... (penso che cose simili siano utili e potresti provarlo), ma nel caso di percorsi semplici disgiunti (se durante la prova hai incontrato percorsi semplici disgiunti), è NPC.

1
@mrm: non lo vedo come un duplicato. Chiedere tutte le passeggiate è un'operazione che richiede molto tempo (in generale, ci sono un numero infinito di passeggiate), mentre l'OP richiede due (semplici) percorsi, non tutte le passeggiate.
Dave Clarke,

Risposte:


10

Considera un grafico , vogliamo sapere se ci sono due diversi percorsi da A a B della stessa lunghezza. Cosa fare? Semplice: codifica due percorsi in uno. Definire il grafico G con i vertici V × V × { 0 , 1 } . Fate un passo nella G ' , facendo due passi indipendenti G . Il bit aggiuntivo indica se i due percorsi sono già stati separati l'uno dall'altro.GABGV×V×{0,1}GG

Formalmente, c'è un bordo in G iff i i , j j in G ed e = e ( i , i ) ( j , j ) .(i,j,e)(i,j,e)GiijjGe=e(i,i)(j,j)

L'algoritmo verifica se esiste un percorso a ( B , B , 1 ) in G , che è O ( V 4 ) , o qualcosa di simile a O ( ( V + E ) 2 ) .(A,A,0)(B,B,1)GO(V4)O((V+E)2)

Se si concorda che questo algoritmo è corretto, di conseguenza, il percorso in è della lunghezza al massimo di 2 n 2 , pertanto le potenziali "collisioni di percorso" devono verificarsi al più tardi a quella lunghezza. Puoi ottenere un algoritmo O ( V ω log V ) da questa osservazione, dove ω è la complessità della moltiplicazione della matrice (chiedi se hai bisogno di uno spoiler ...).G2n2O(VωlogV)ω

Sento fortemente che esiste un algoritmo , che utilizza maggiormente la struttura del problema.O(V+E)


3
È elegante
Raffaello

4

Probabilmente ho una risposta per questo problema, ma non sono sicuro che funzioni.

Non è importante "trovare" i due percorsi, l'unica cosa importante è "sapere" se esistono o no. Non penso che questo sia un problema completo NP.

Quindi, prendere la matrice di adiacenza . Possiamo facilmente supporre che sia riempito con un valore di 0,1. (0 = nessun bordo; 1 = c'è un bordo) Usiamo la seguente algebra con 3 valori (0,1,2), dove tutto funziona come al solito tranne: 2 + <something> = 2 ; 2 <qualunque sia maggiore di 0> = 2A2+<something>=22<whatever greater than 0>=2

Quindi, se ci sono due percorsi della stessa lunghezza da mi aspetto che ci sia un valore p tale che ( A p ) i , j = 2 .i,jp(Ap)i,j=2

Sia il numero di vertici nel grafico (o, diciamo, che A abbia dimensione n × n ). Non conosco il valore di p , ma se ripetessi A moltiplicando con se stesso per al massimo n 2 dovrei trovare la risposta. (quindi, p < n 2 ) (il senso è che controllo A , quindi controllo A 2 , quindi controllo A 3 e così via ...)nAn×npAn2p<n2AA2A3

ecco la mia argomentazione:

  • se i due percorsi sono percorsi semplici, beh, funziona; se ci sono, al massimo devo ripetere volte.n
  • Se c'è almeno un ciclo neasted o c'è un percorso con due cicli, beh, devo trovare il minimo comune multiplo (LCM). è sicuramente un valore maggiore e in meno di n 2 volte, se c'è, dovrei trovarli.n2n2
  • Se i due percorsi sono due percorsi distinti, entrambi con un ciclo, è più o meno simile a trovare una soluzione per queste due equazioni: , dove m e k sono la lunghezza di questi due distinti cicli. La moltiplicazione della matrice A q , come definito sopra, dice "c'è un percorso da i a j la cui lunghezza è q ?" Quindi, se A q è maggiore di 1 significa che ci sono più percorsi che conducono da i a j . Ripetendo la matrice nα+βm=γ+δkmkAqijqAq1ij volte passiamo attraverso tutte le possibili combinazioni di δ e β . Infatti, L C M ( a , b ) è definito come ( a b ) / G C D ( a , b ) e nessun ciclo può essere maggiore di n .n2δβLCM(a,b)(ab)/GCD(a,b)n

Mi fermo per iterare una volta trovato .(Ap)i,j=2

ho sbagliato?


αγ

2

n2nαγLCM(a,b)+α+γ<ab+α+γα+γ+a+b<nab+α+γn2
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.