Enumerazione di tutte le coppie di percorsi disgiunti


10

Dato un grafo diretto e due vertici . Una coppia di percorsi semplici da a è bordo disgiunto se non condividono un bordo.G=(V,E)s,tVp1,p2st

Utilizzando il flusso massimo, è facile decidere se esiste una coppia di percorsi disgiunti del bordo da a . Ora, esiste un algoritmo di ritardo polinomiale per enumerare tutte le coppie del percorso disgiunto del bordo da a ?stst


1
No, poiché potrebbero esserci in modo esponenziale molti di questi percorsi.
Kaveh,

6
@Kaveh: Penso che un "algoritmo di ritardo polinomiale" possa impiegare tempo esponenziale, purché il ritardo tra le uscite sia polinomialmente lungo. Ad esempio, esiste un algoritmo di ritardo polinomiale che elenca tutte le cricche massime in ordine crescente, anche se il numero di cricche massime è esponenziale.
Robin Kothari,

3
È possibile includere la spiegazione del ritardo polinomiale nella domanda? Non ne avevo familiarità fino a quando non ho letto il commento di Robin.
Artem Kaznatcheev

@Robin, hai ragione, non ho prestato attenzione alla parola "ritardo".
Kaveh,

Risposte:


6

Credo che la risposta di Artem Kaznatcheev sia corretta, ma non fornisce spazio polinomiale. Quindi ecco un approccio diverso che dovrebbe funzionare un po 'meglio in questo senso.

Utilizzando il flusso massimo è possibile risolvere un problema leggermente più generale: trovare una coppia di percorsi disgiunti del bordo da alcuni due vertici {s1, s2} ad un'altra coppia di vertici {t1, t2}, ma senza controllare quale vertice di origine è collegato a quale vertice di destinazione.

Supponiamo di avere un grafico G e vertici s1, s2, t1, t2 per i quali vogliamo elencare tutte le coppie di percorsi. Trova una singola coppia di percorsi P1, P2 e lascia e = (s1, v) il primo bordo su uno di quei percorsi. Quindi possiamo dividere lo spazio problematico in due sottoproblemi: le coppie di percorsi che usano e sono uguali ai percorsi da {v, s2} a {t1, t2} in G-s1 e le coppie di percorsi che non usano e sono gli stessi dei percorsi da {s1, s2} a {t1, t2} in Ge. Ripeti in entrambi questi due sottoproblemi e (per evitare la duplicazione) riporta un percorso solo quando sei in fondo alla ricorsione.


1
è ovvio che l'algoritmo è un ritardo polinomiale se aspettiamo il fondo della ricorsione?
Artem Kaznatcheev

La ricorsione prende polinomialmente molti livelli per scendere dal fondo (poiché ogni livello cancella qualcosa dal grafico) e ogni ramo ritorna immediatamente (perché non riesce a trovare una coppia di percorsi) o fa il fondo e restituisce qualcosa, quindi sì, esso richiede solo un ritardo polinomiale.
David Eppstein,

5

Questa è la prima volta che leggo degli algoritmi di ritardo polinomiale, quindi non sono sicuro al 100% della mia risposta, ma penso che qualcosa come il seguente dovrebbe funzionare.

Scegli alcune convenzioni per rappresentare i percorsi che hanno un ordinamento totale naturale definito su di esso. (Un esempio potrebbe essere solo quello di elencare i vertici del percorso e ordinarli lessicograficamente). Scegli la tua struttura di dati D preferita sul posto che supporta la ricerca logaritmica e inseriscila (ad esempio un albero rosso-nero). Lascia che G sia il tuo grafico<Dsol

Definire un algoritmo :F


:F(S,t,sol,*D)

(qui D indica un riferimento a una struttura dati inplace D )*DD

  1. esegui il tuo algoritmo poly-time per restituire una coppia di percorsi edge-disjoint con P < Q da s a t .(P,Q)P<QSt
  2. Se non è in D .(P,Q)D

    2.1. Inserisci in D (ed esegui l'output se supponi di eseguire l'output durante l'esecuzione dell'algoritmo).(P,Q)D

    uvE(PQ)F(S,t,sol-{uv},*D)


DS,tV(sol)S<tStF(S,t,sol,*D)

PSPUNCEPSPUNCE


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.