Riferimento per algoritmo di test di aciclicità di grafi misti?


16

Un grafico misto è un grafico che può avere bordi sia diretti che non diretti. Il suo grafico non orientato sottostante viene ottenuto dimenticando gli orientamenti dei bordi diretti e nell'altra direzione si ottiene un orientamento di un grafico misto assegnando una direzione a ciascun bordo non orientato. Un insieme di bordi forma un ciclo in un grafico misto se può essere orientato per formare un ciclo diretto. Un grafico misto è aciclico se e solo se non ha cicli.

Questo è tutto standard e ci sono molti articoli pubblicati che menzionano grafici misti aciclici. Pertanto, è necessario conoscere il seguente algoritmo per il test di aciclicità di grafici misti:

Ripeti i seguenti passi:

  • Rimuovere qualsiasi vertice che non abbia bordi diretti in entrata e bordi non indirizzati incidenti, poiché non può far parte di alcun ciclo.
  • Se un vertice non ha bordi diretti in entrata ma ha esattamente un bordo non diretto incidente, allora ogni ciclo che usa il bordo non diretto deve entrare in quel bordo. Sostituire il bordo non diretto con un bordo diretto in entrata.

Arrestare quando non è possibile eseguire più passaggi. Se il risultato è un grafico vuoto, il grafico originale deve essere necessariamente aciclico. Altrimenti, partendo da qualsiasi vertice che rimane, si può tornare indietro attraverso il grafico, ad ogni passo seguendo indietro attraverso un bordo in arrivo o seguendo un bordo non diretto che non è quello usato per raggiungere il vertice corrente, fino a vedere un vertice ripetuto. La sequenza dei bordi seguita tra la prima e la seconda ripetizione di questo vertice (in ordine inverso) forma un ciclo nel grafico misto.

L'articolo di Wikipedia sui grafici misti menziona i grafici misti aciclici ma non menziona come testarli, quindi vorrei aggiungere qualcosa su questo algoritmo, ma per questo ho bisogno di un riferimento pubblicato. Qualcuno può dirmi dove appare (o qualsiasi altro algoritmo per testare l'aciclicità) in letteratura?


cosa succede quando un vertice ha due bordi non indirizzati incidente e nessun altro bordo? Ad esempio in un triangolo non orientato. Voglio dire, le regole sopra riguardano questo caso?
Mateus de Oliveira Oliveira,

Non puoi fare nulla per un tale vertice fino a quando un diverso vertice applica la regola che orienta uno dei bordi. Se rimani bloccato in una situazione in cui esistono tali vertici e non puoi applicare altre regole, il tuo grafico contiene un ciclo.
David Eppstein,

Forse sarebbe più chiaro considerare cosa succede nel caso in cui il tuo grafico non sia indirizzato. Un modo per verificare se si tratta di una foresta è rimuovere foglie (vertici di grado uno) e vertici isolati fino a ottenere un grafico vuoto (è una foresta) o un 2 core non banale (un sottografo in cui tutti i vertici hanno grado ≥ 2, che contiene necessariamente un ciclo). L'algoritmo grafico misto degenera a questo nel caso non indirizzato (tranne che orienta le foglie anziché rimuoverle immediatamente), così come degenera in un algoritmo di ordinamento topologico standard nel caso diretto.
David Eppstein,

Non sono sicuro se hai visto: c'è un post su cs.stackexchange che fa una domanda simile rif . Il risponditore fornisce un algoritmo per trovare un ciclo in un grafico misto orientando i bordi non indirizzati, rifiutando il grafico se non esiste. C'è anche la carta (s) su determinare se un grafico misto è fortemente orientabile ref ma stranamente, non riusciva a trovare nulla sul fatto di trovare i componenti collegati nei grafici misti.
Quanquan Liu,

Grazie - no, non l'avevo visto. La domanda "trova un orientamento per fare in modo che il grafico contenga un ciclo diretto" è sicuramente la stessa, e l'algoritmo nella risposta sembra corretto. Ma a differenza di quello che descrivo, non è tempo lineare.
David Eppstein,

Risposte:


1

Trovare cicli misti in un grafico misto equivale a trovare cicli diretti elementari (di lunghezza> = 3) nel grafico diretto corrispondente. Il grafico diretto corrispondente viene ottenuto dal grafico misto sostituendo ciascun bordo non diretto con due bordi diretti che puntano in direzioni opposte. Prova: (1) Ogni ciclo diretto elementare (di lunghezza> = 3) nel digraph corrisponde direttamente a un ciclo misto nel grafico misto. (2) Ogni ciclo misto nel grafico misto contiene un ciclo misto elementare di lunghezza> = 3, e ogni ciclo corrispondente corrisponde direttamente a un ciclo diretto elementare (di lunghezza> = 3) nel grafico diretto. (1) e (2) dimostrano insieme entrambe le direzioni dell'istruzione , qed. Quindi stiamo cercando riferimenti su come calcolare (tutti?) I cicli elementari (di lunghezza> = 3) in un grafico diretto.

I commenti indicano che cs.stackexchange contiene alcune risposte a questa domanda, ma non è chiaro come organizzare i risultati in una risposta concisa. Questo post sul blog sembra riassumere bene i (più?) Riferimenti importanti:

Algoritmo di R. Tarjan

Il primo algoritmo che ho incluso è stato pubblicato da R. Tarjan nel 1973.

Enumeration of the elementary circuits of a directed graph
R. Tarjan, SIAM Journal on Computing, 2 (1973), pp. 211-216
http://dx.doi.org/10.1137/0202017

Algoritmo di DB Johnson

L'algoritmo di DB Johnson del 1975 migliora l'algoritmo di Tarjan per la sua complessità.

Finding all the elementary circuits of a directed graph.
D. B. Johnson, SIAM Journal on Computing 4, no. 1, 77-84, 1975.
http://dx.doi.org/10.1137/0204007

Nel peggiore dei casi, l'algoritmo di Tarjan ha una complessità temporale di O (n⋅e (c + 1)) mentre l'algoritmo di Johnson riesce a rimanere in O ((n + e) ​​(c + 1)) dove n è il numero di vertici, e è il numero di bordi e c è il numero di cicli nel grafico.

Algorithm di KA Hawick e HA James

L'algoritmo di KA Hawick e HA James del 2008 migliora ulteriormente l'algoritmo di Johnson e elimina i suoi limiti.

Enumerating Circuits and Loops in Graphs with Self-Arcs and Multiple-Arcs.
Hawick and H.A. James, In Proceedings of FCS. 2008, 14-20
www.massey.ac.nz/~kahawick/cstn/013/cstn-013.pdf
http://complexity.massey.ac.nz/cstn/013/cstn-013.pdf

Contrariamente all'algoritmo di Johnson, l'algoritmo di KA Hawick e HA James è in grado di gestire grafici contenenti bordi che iniziano e finiscono con lo stesso vertice e bordi multipli che collegano gli stessi due vertici.

Lo stesso test di aciclicità sembra essere semplice: calcola i componenti fortemente collegati del grafico. Qualsiasi ciclo (elementare) è completamente contenuto in un componente fortemente connesso. Un componente fortemente connesso contiene un ciclo elementare se non è un albero non orientato.

L'algoritmo proposto da David Eppstein calcola inoltre un ciclo elementare come prova, e gli algoritmi sopra elencati elencano tutti i cicli elementari. Qualsiasi vertice o bordo non contenuto in un ciclo elementare potrebbe essere eliminato come una fase di preelaborazione per migliorare la velocità degli algoritmi di cui sopra. L'algoritmo di David Eppstein potrebbe essere utilizzato a tale scopo, ma anche se utilizzato solo sui componenti fortemente connessi, non eliminerà ogni possibile vertice o bordo che può essere eliminato. Ma anche se potrebbe essere esteso per farlo (il calcolo dell'albero tagliato a blocchi almeno consente di eliminare ogni possibile vertice che può essere eliminato), non è chiaro se ciò migliorerebbe davvero la velocità degli algoritmi di cui sopra.


Qualcuno di questi riferimenti menziona anche grafici misti? So di trovare cicli nei grafici diretti. La mia domanda riguardava le estensioni di quegli algoritmi ai grafici misti.
David Eppstein,

@DavidEppstein La ricerca di cicli misti in un grafico misto equivale a trovare cicli elementari (di lunghezza> = 3) nel grafico diretto corrispondente. Trovare un riferimento per tale affermazione potrebbe essere una sfida, ma dimostrarlo è semplice. Ora ho aggiunto la dichiarazione e la sua prova alla risposta. (Aggiunta anche un'osservazione senza prove del fatto che il calcolo dell'albero tagliato a blocchi consente di eliminare ogni possibile vertice che può essere eliminato senza influire sui cicli elementari.)
Thomas Klimpel,

Ok, ma non sono ancora lineari.
David Eppstein,

@DavidEppstein Il test di aciclicità viene eseguito in tempo lineare. Ma hai ragione, il momento in cui uno di questi algoritmi deve trovare il primo circuito elementare (di lunghezza> = 3) non è lineare (nel peggiore dei casi). Le implementazioni peggiori e più disponibili dell'algoritmo di Johnson sembrano usare più del tempo O ((n + e) ​​(c + 1)), quando applicate a un singolo cerchio diretto (con n vertici, e = n bordi e c = 1 elementare cicli). Tuttavia, questa doveva essere una risposta corretta, perché l'articolo di Johnson sembra essere il riferimento più citato per "trovare circuiti elementari".
Thomas Klimpel,
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.