Trova i percorsi più brevi in ​​un grafico unipatico ponderato


12

Si dice che un grafico diretto è unipatico se per due vertici e nel grafico , esiste al massimo un percorso semplice da a .v G = ( V , E ) u vuvG=(V,E)uv

Supponiamo che mi venga dato un grafico unipatico tale che ogni fronte abbia un peso positivo o negativo, ma non contenga cicli di peso negativo.G

Da questo voglio trovare un algoritmo che trova tutti i percorsi più breve a tutti i nodi da una fonte nodo .sO(|V|)s

Non sono sicuro di come affrontare questo problema. Sto cercando di vedere come potrei usare il fatto che non contiene cicli di peso negativo e ovviamente al massimo un semplice percorso tra qualsiasi nodo da u a v .


1
Cosa hai provato fino ad ora? Se sei totalmente bloccato, inizia in piccolo: come sono realmente i grafici unipatici? Ad esempio, disegna ogni grafico unipatico con un vertice, due vertici, tre vertici e così via. Potresti individuare uno schema utile. Inoltre, dici che non ci sono cicli di peso negativo - possono esserci anche cicli (di qualsiasi peso)?
Juho

@mrm A che modello stai pensando? I grafici unipatici possono avere cicli, in un modo vincolato che non riesco a trovare un modo semplice per esprimere.
Gilles 'SO-smetti di essere malvagio' il

@mrm No. Un bordo può appartenere al massimo a un ciclo. Un nodo può appartenere a qualsiasi numero di cicli: il forma -pointed stelle-grafico è unipathic (e si può ottenere un rapporto ancora più elevato di cicli elementari per nodo). E = i n { ( a , b i ) , ( b i , a ) }nE=in{(a,bi),(bi,a)}
Gilles 'SO- smetti di essere malvagio' il

Risposte:


10

Scegli una rappresentazione dei dati

Innanzitutto, guarda le dimensioni del risultato. Volete la raccolta dei percorsi più brevi da verso ogni altro nodo. A meno che la lunghezza media di un percorso non sia delimitata da una costante (cosa che non lo è: qualsiasi elenco è unipath e se si prende la radice per la lunghezza totale dei percorsi è dove è la lunghezza dell'elenco), dovrai fare attenzione nella rappresentazione dei dati: la struttura contenente i percorsi dovrà utilizzare la condivisione tra i percorsi.s n ( n - 1 ) / 2 nssn(n1)/2n

Escludendo i cicli, esiste un singolo percorso da a qualsiasi altro nodo . Se quel percorso attraversa un nodo intermedio , il primo segmento del percorso è il percorso desiderato da a . u t s tsutst

Propongo di archiviare il risultato in un array, indicizzato da nodi numerati da a , con . Ogni elemento dell'array memorizza l'indice del nodo precedente sul percorso di quel nodo (utilizzare ad esempio come marcatore speciale per nodi che non sono raggiungibili da ). Il percorso da a sarà .| E | - 1 s = 0 - 1 s s t ( s = R [ R [ t ] ] , , R [ R [ t ] ] , R [ t ] , t )0|E|1s=01sst(s=R[R[t]],,R[R[t]],R[t],t)

Attraversa il grafico

Inizializza su tutto .- 1R1

Esegui un attraversamento in profondità del primo o dell'ampiezza del grafico a partire da . Ogni volta che viene raggiunto un nodo , impostare sul suo predecessore.u R [ u ]suR[u]

Poiché ci sono cicli, un nodo potrebbe essere raggiunto più di una volta. Avere indica che già stato visitato.uR[u]1u

Dimostrare la correttezza

A causa della proprietà unipatica, non importa come raggiungiamo ciascun nodo, purché non abbiamo completato un ciclo. C'è solo un percorso semplice.

Dimostrare la complessità

L'algoritmo può raggiungere ciascun nodo più di una volta, quindi non è chiaro che la sua complessità sia . Il lavoro svolto è in effetti dove sono i bordi che sono raggiungibili dalla sorgente. Più precisamente, raggiungiamo un nodo più di una volta solo in una circostanza: se il nodo è il primo che raggiungiamo in un determinato ciclo, e in questo caso lo raggiungiamo due volte (una volta da un percorso semplice e una volta dopo aver completato il ciclo ).Θ ( | E 0 | ) V 0O(|V|)Θ(|E0|)V0

Bene allora. Dimostriamo che in un grafico unipatico, il numero di cicli elementari cresce al massimo linearmente con il numero di nodi. (Un ciclo elementare è uno che non contiene un ciclo più breve.) Nella discussione che segue, assumerò che il grafico non abbia un auto-bordo (nessun bordo da un nodo a se stesso; tali bordi sono comunque irrilevanti per la costruzione del percorso ).

I grafici unipatici possono avere cicli, ma in modo molto limitato. Sarebbe bello se potessimo in qualche modo associare ciascun ciclo a un nodo distinto (o almeno, al massimo un numero limitato di cicli per nodo). I cicli possono condividere un nodo? Sfortunatamente sì.

Puoi avere cicli tutti condividendo un nodo e nessun altro nodo. Il grafico risultante è unipatico. Con cicli di lunghezza 2, questo è un motivo a stella con un nodo centrale e un numero qualsiasi di nodi tale che .a a b ii , a b imaabii,abi

Quindi dovremo lavorare di più. Bene, proviamo a dimostrarlo induttivamente. Sia il numero di nodi in un grafico , il numero di spigoli e il numero di cicli elementari che non sono spigoli automatici. Affermo che se è unipatico e non vuoto, allora .G # E ( G ) # C ( G ) G # C ( G ) # V ( G ) - 1#V(G)G#E(G)#C(G)G#C(G)#V(G)1

Per un grafico con uno o due nodi, questo è ovvio. Supponiamo che l'affermazione valga per tutti i grafici in modo che e che sia un grafico unipatico con nodi. Se non ha ciclo, , caso chiuso. Altrimenti, sia un ciclo elementare.#V(G)<nn G 0 = # C ( G ) < # V ( G ) ( a 1 , , a m )GnG0=#C(G)<#V(G)(a1,,am)

Comprimi il ciclo: lascia che sia il grafico i cui nodi sono quelli di meno più un nodo e i cui bordi sono tutti i bordi di non coinvolgono gli , più ogni volta che e ogni volta che . Ogni percorso in induce un percorso in (se il percorso comporta , quindi sostituirlo conGG{a1,,am}G a i a G b i , a i G b b G a i , b G a i G G b a c b a ia i + 1aGaiaGbi,aiGbbGai,bGaiGGbacG G G G baiai+1ajc in ). Pertanto è unipatico. Inoltre, poiché i cicli in non condividono i bordi, ha tutti i cicli in tranne quello che abbiamo eliminato: . Per induzione, . Poiché , abbiamo .GGGGG#C(G)=#C(G)1#C(G)#V(G)1#V(G)=#V(G)m+1#C(G)=#C(G)+1#V(G)m=nmn1

Questo conclude la prova. L'incrocio segue al massimo spigoli.2|V|2

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.