Lo zero è consentito come peso di un bordo, in un grafico ponderato?


60

Sto cercando di scrivere uno script che genera grafici casuali e ho bisogno di sapere se un bordo in un grafico ponderato può avere il valore 0.

in realtà ha senso che 0 possa essere usato come peso di un bordo, ma ho lavorato con i grafici negli ultimi giorni e non ne ho mai visto un esempio.

inserisci qui la descrizione dell'immagine


28
Se i valori negativi sono "consentiti", allora perché non uno zero? :)
Derek 28 會 功夫 il

5
Proprio come un rapido esempio, se i pesi positivi rappresentano il consumo netto di carburante quando si viaggia da un nodo all'altro, i pesi negativi possono rappresentare il rifornimento netto. Un bordo a peso zero è il punto in cui il carburante esaurito viene esattamente compensato dal rifornimento di carburante.
JW,

1
@DavidRicherby Credo che la vera domanda qui sia, ad esempio, "l'algoritmo X è corretto in presenza di spigoli zero". Altrimenti, qual è il contesto? La risposta può essere sì o no, a seconda dei dettagli. Una domanda come "può un array contenere zeri" è altrettanto significativa.
Juho,

1
@Juho: Oh, è chiaro, va bene. È come chiedere se un numero può essere negativo. A te sembra ovvio che dipende dal contesto, ma sicuramente non era ovvio per le persone fino a quando non sono arrivati ​​numeri negativi. Anche zero non era ovvio.
Mehrdad,

1
A seconda di ciò che vuoi fare, i tuoi pesi potrebbero non essere nemmeno numeri reali. Ad esempio, se il tuo grafico rappresenta un circuito CA, i tuoi pesi potrebbero essere fasori e quelli sono numeri complessi.
user2357112

Risposte:


165

Consentito da chi ? Non esiste un'Amministrazione centrale dei grafici che decida cosa si può e non si può fare. Puoi definire gli oggetti in qualsiasi modo sia conveniente per te, purché tu sia chiaro su quale sia la definizione. Se i bordi a peso zero sono utili per te, quindi utilizzali; assicurati solo che i tuoi lettori sappiano che è quello che stai facendo.

Il motivo per cui di solito non si vedono bordi a peso zero è che, nella maggior parte dei contesti, un bordo con peso zero è esattamente equivalente all'assenza di un bordo. Ad esempio, se il tuo grafico rappresenta i paesi e la quantità di scambi effettuati tra di loro, un margine a peso zero significherebbe nessun commercio, il che equivale a non avere alcun margine. Se il tuo grafico rappresenta le distanze, un bordo a peso zero corrisponderebbe a due punti a distanza zero l'uno dall'altro, il che significherebbe che sarebbero effettivamente nello stesso posto, quindi dovrebbero essere entrambi rappresentati dallo stesso vertice. Tuttavia, in altri contesti, i bordi a peso zero potrebbero avere un senso. Ad esempio, se il tuo grafico rappresenta una rete stradale e i pesi dei bordi rappresentano la quantità di traffico, c'è una grande differenza tra una strada che nessuno usa (bordo a peso zero) e nessuna strada (nessun bordo).


1
Vale la pena notare che molti algoritmi grafici specificano esplicitamente se funzionano su grafici con pesi negativi o meno. Penso che ciò chiarisca che sono ammessi anche pesi negativi, a seconda dei contesti.
Mooing Duck,

6
@MooingDuck Penso che il punto della domanda sia che, mentre gli algoritmi spesso dicono spesso se funzionano con pesi negativi, i pesi zero vengono menzionati raramente. I pesi negativi sono molto meno insoliti di zero, quindi, in questo particolare contesto, non sono sicuro che debbano essere menzionati.
David Richerby,

13

Dipende dal contesto. In generale sì, possono essere consentiti bordi di zero e persino di peso negativo. In alcuni casi specifici, è possibile che i pesi dei bordi siano non negativi o strettamente positivi (ad esempio, l'algoritmo di Dijkstra richiede che i pesi non siano negativi).


Esiste un tipo specifico di grafico che proibisce zero? e consente valori negativi o positivi?
Taxellool,

9
"Grafico ponderato sul bordo diverso da zero".
Tom van der Zanden,

10
@Taxellool Gli oggetti matematici non sono incastonati nella pietra. Non esiste un elenco fisso di oggetti matematici con nomi fissi che sono i soli che ti è consentito utilizzare.
David Richerby,

Dipende dall'algoritmo che usi. Bellman-Ford accetta zeri, mentre a Dijkstra sono ovviati
Manuel Azar,

5

Come notano le altre risposte, sei perfettamente libero di considerare (o escludere dalla considerazione) grafici ponderati con bordi a peso zero.

Ciò detto, secondo la mia esperienza, la consueta convenzione nella maggior parte delle applicazioni dei grafici ponderati è di non fare distinzione tra un bordo a peso zero e l'assenza di un bordo. Una ragione di ciò è che, in genere, i grafici ponderati si presentano come generalizzazioni di multigrafi , che a loro volta sono generalizzazioni di grafici semplici.

In particolare, una multigrafo è un grafico che (a differenza di un semplice grafico ) consente più spigoli tra la stessa coppia di nodi. Considerando che, in un semplice grafico, qualsiasi coppia di nodi è sempre connessa da 0 o 1 spigoli, una coppia di nodi in una multigrafia può essere connessa da 0, 1, 2, 3 o più (ma sempre un numero intero non negativo di ) bordi.

La generalizzazione di una multigrafo per consentire un numero frazionario di spigoli tra una coppia di nodi porta naturalmente a considerare i grafici ponderati e molti algoritmi che lavorano su multigrafi arbitrari possono anche essere fatti funzionare su tali grafici ponderati. Ma per tali algoritmi, il "peso" di un bordo indica davvero la sua molteplicità . Quindi, data questa interpretazione, non può esserci alcuna distinzione significativa tra "nessun bordo" e "0 bordi" tra una coppia di nodi: entrambi significano esattamente la stessa cosa.

Naturalmente, un "grafico ponderato" per definizione è in realtà solo un grafico con un numero associato a ciascun bordo, ed è perfettamente possibile interpretare il peso come qualcosa di diverso dalla molteplicità, nel qual caso una distinzione tra nessun bordo e un peso zero il bordo può davvero essere significativo. Ma è improbabile che provare ad applicare algoritmi multigrafo standard a tali "grafici stranamente ponderati" produca risultati che avrebbero senso in termini di interpretazione alternativa (non molteplicità) dei pesi dei bordi.


6
Il modo in cui i grafici ponderati vengono visualizzati "in genere" dipende molto dal tuo campo. Quando modifico una rete stradale come grafico per trovare percorsi più brevi, i pesi rappresentano le distanze, non inizio con più strade tra incroci e quindi introduco strade frazionarie.
adrianN,

3
@adrianN Sebbene in un grafico del genere l'assenza di un bordo corrisponda a un valore infinito associato e non a zero.
Codici

0

Pensa a un grafico del sistema stradale a Cambridge, nel Regno Unito, le note sono condivise tra ciclisti e automobilisti, così come la maggior parte dei bordi. In questo modo si riduce notevolmente il costo di gestione dei dati.

Ora, se definiamo il peso del bordo come tempo di percorrenza in secondi, ogni bordo avrà due pesi, uno per le auto e un altro per le biciclette. Alcuni pesi saranno infiniti poiché le auto non sono ammesse sulle piste ciclabili.

Consideriamo ora due incroci stradali molto vicini tra loro, così vicini da essere seghettati solo da alcuni pali che fermano gli automobilisti. (Ad esempio un incrocio, in cui le auto possono solo girare a sinistra, ma i ciclisti possono andare in qualsiasi direzione.) Otteniamo quindi alcuni bordi con un peso infinito dagli automobilisti e un peso 0 per i ciclisti.

(Chiaramente il grafico potrebbe quindi essere pre-elaborato per creare un grafico più semplice per il percorso dei ciclisti, prima di elaborare i percorsi migliori.)


Non vedo come questo risolva la domanda. La domanda riguarda i bordi con peso zero. Nel tuo esempio (che, a proposito, potrebbe non avere molto senso per le persone che non hanno familiarità con Cambridge), ogni bordo ha già due pesi. Ora, nella misura in cui è possibile definire grafici ponderati come desiderato, va bene, ma non sembra rispondere alla domanda posta. Inoltre, i bordi che descrivi sembrano avere almeno un peso molto ridotto per i ciclisti: anche spostarsi a breve distanza richiede un tempo diverso da zero.
David Richerby,

@DavidRicherby, supponiamo solo che i tempi inferiori a 1 secondo non vengano registrati.
Ian Ringrose,

0

Sembra che tu stia usando il peso per cercare di rappresentare due aspetti distintamente diversi del grafico. Il primo è se il grafico ha effettivamente un bordo rappresentabile (disegnato) e il secondo è il suo peso effettivo.

Come hai notato, cadi in una situazione confusa se hai usato 'diverso da zero' come indicatore della presenza di un bordo (e avrebbe bisogno di essere disegnato o elencato), mentre allo stesso tempo ora hai trovato una situazione dove il peso zero è classificato come valido.

Fondamentalmente avrai bisogno di un altro modo di rappresentare la presenza del bordo (supponendo che tu ne abbia effettivamente bisogno, e non puoi semplicemente creare un array di pesi N ^ 2, ma poi cadi nella trappola della necessità di decidere cosa fare del loop bordi posteriori ...)


Non sono sicuro che questo risponda davvero alla domanda. La domanda è se i grafici potrebbero avere bordi a peso zero; la tua risposta è principalmente su come si potrebbe implementare una struttura di dati per grafici con bordi a peso zero.
David Richerby,

@DavidRicherby, Close; La mia (mia risposta) era più sul perché e su come la domanda è venuta (o potrebbe essere venuta) in essere - Un problema di XYProplem. Spesso essere in grado di razionalizzare il motivo per cui è stato un problema in primo luogo può aiutare notevolmente a vedere come la soluzione è la risposta giusta e non solo un po 'di "confusione"
Philip Oakley,
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.