spotting cicli di grafici - spiegazione semplice


9

alcuni potrebbero aiutarmi a capire come trovare cicli nei grafici in termini laici?

Ho letto altre domande, come questa e anche alcune delle pagine di Wikipedia, ma sembrano scendere piuttosto rapidamente nel gergo matematico.

Ho un modello del grafico in Java, modellazione di nodi e bordi "in" e "out" - e il modello conosce nodi collegati solo in una direzione, questo mi permette di trovare i nodi foglia come punto di partenza, il mio piano era per risalire il grafico da ciascuno di questi nodi foglia, per ogni "passeggiata", tenendo un elenco di tutti gli altri nodi che ho trovato sul mio percorso. Se vedo qualcosa già nella lista in qualsiasi momento, saprò di aver trovato un ciclo nel grafico. Questo tuttavia sembra un po 'semplicistico.

Sono sicuro che questo è un problema risolto, sarebbe bello se potesse essere spiegato in termini semplici.

-asso

Risposte:


6

Il modo più semplice a cui riesco a pensare di spiegare i cicli dei grafici in termini di profani, è qualcosa del genere:

  • Innanzitutto, suppongo che tu conosca le basi di cosa sia un grafico e quali nodi e bordi siano. Questo esempio presuppone che tu abbia un grafico in cui tutti i bordi sono a senso unico.
  • Crea il tuo grafico e seleziona un nodo come punto di partenza.
  • Crea un oggetto contenitore di qualche tipo (un elenco o un hash funzionerebbe meglio). Chiamalo "Visitato".
  • Crea un secondo oggetto contenitore (una coda sarebbe l'ideale qui) e chiamalo "Apri".
  • Aggiungi il nodo iniziale all'elenco Apri.
  • Ripeti mentre l'elenco Apri non è vuoto:
    • Rimuovi il primo elemento da Apri e chiamalo Attuale
    • Se Corrente esiste in Visitato, hai un ciclo.
    • In caso contrario, aggiungi Corrente a visitata, quindi aggiungi tutti i nodi che Corrente può raggiungere dai bordi in uscita su Apri.
  • Se Apri finisce vuoto e non sono stati rilevati cicli, allora non hai cicli. (Almeno non nel set raggiungibile che ha origine dal punto di partenza, che non è necessariamente la totalità del tuo grafico se hai isole nel tuo grafico.)

0

Fondamentalmente, fai una prima ricerca ampia nel grafico e tieni traccia di quali nodi hai visitato usando una hashmap.

In qualsiasi momento, se si incontra un nodo che è già stato visitato (presente in hashmap), allora si sa che c'è un ciclo nel grafico.

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.