Trova ciclo negativo con vincoli di vertice


11

Dato un grafico con bordi ponderati, come possiamo trovare un ciclo negativo che contiene almeno un vertice in un dato set di vertici ? Grazie.{V1,V2,,Vk}


Questa domanda non è abbastanza chiara. Pesi su cosa, bordi o vertici? Che cos'è , V 1 è un vertice o un insieme di vertici? {V1,V2,,Vk}V1
Yixin Cao,

@YixinCao Grazie per aver notato, modificato: peso sui bordi, è un vertice. V1
Tianyi Cui,

Risposte:


8

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 (ViViViVi , se ricordo.)O(nm)

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. )V1STGV1N/20.01V1STV1

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).v(v,v)


2
Mi piace questa risposta molto meglio della mia.
David Eppstein,

6

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 .nnuviui+1viuiu0v

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.


Se il grafico originale ha vertici e m bordi, il grafico di nuova costruzione avrà n 2 vertici e n m bordi. La ricerca di cicli negativi richiede tempo O ( n 3 m ) , che sembra piuttosto grande. Sto ancora aspettando una soluzione migliore, e grazie mille! nmn2nmO(n3m)
Tianyi Cui,

2
Forse più problematico, i cicli che trova non saranno necessariamente semplici. Hai bisogno di semplici cicli negativi?
David Eppstein,
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.