Dato un grafico con bordi ponderati, come possiamo trovare un ciclo negativo che contiene almeno un vertice in un dato set di vertici ? Grazie.
Dato un grafico con bordi ponderati, come possiamo trovare un ciclo negativo che contiene almeno un vertice in un dato set di vertici ? Grazie.
Risposte:
Se non è necessario che il ciclo sia semplice, suddividere il grafico (diretto) nei suoi componenti fortemente collegati e per ogni componente contenente uno dei vertici dati , verificare se il componente contiene un ciclo negativo. Se nessun componente lo fa, non esiste un ciclo negativo contenente alcun V i . Ma se qualche componente lo fa, puoi trovare un ciclo negativo (non semplice) contenente V i prendendo molte copie del ciclo negativo e aggiungendo a quei percorsi da e verso alcuni vertici nel ciclo a V i . (Il tempo totale per trovare una rappresentazione implicita del ciclo desiderato sarà lo stesso del tempo per trovare un ciclo negativo in un grafico diretto, ad es. O ( , se ricordo.)
Se si richiede che il ciclo sia semplice, il problema diventa NP-completo, anche se viene fornito un solo vertice . (Puoi ridurre il percorso hamiltoniano al problema: per trovare un percorso hamiltoniano da una data sorgente S a un dato sink T in un dato grafico G , dai un peso ai bordi esistente -1, quindi aggiungi un vertice artificiale V 1 con due bordi di costo N / 2 - 0,01 ciascuno, uno da V 1 a S e uno da T a V 1. )
Se permetti al ciclo di ripetere i vertici ma non i bordi, credo che sia ancora NP-completo (con una riduzione simile, ma suddividendo ogni vertice in un bordo diretto ( v , v ′ ) in modo standard).
Suppongo che il tuo input sia un grafico diretto; Non so come fare per il caso non indirizzato.
Crea copie del set di vertici del tuo grafico, dove n è il numero di vertici nel grafico. Sostituire ogni bordo da u a v nel grafico originale da bordi che vanno dalla copia i di u per copiare i + 1 di contro , per tutte le scelte di i . Inoltre, se u appartiene al set vertice specificato ma non altrimenti, anche comprendere un bordo che va dalla copia i di u per copiare 0 di v .
I cicli nel grafico espanso si proiettano tutti indietro fino a cicli nel grafico originale, ma ogni ciclo nel grafico espanso contiene uno dei vertici specificati (altrimenti non è possibile tornare indietro attraverso i livelli di espansione), quindi il grafico originale contiene un ciclo negativo contenente un vertice specificato se il grafico espanso contiene un ciclo negativo.