Domanda

Supponiamo di avere un DAG con DAG ROODED collegato a bordo $ G= (V, E, R \ IN V, W \ IN E \ A \ MathBB {Z}) $ dove esiste una sequenza di set non rivestiti (chiamati "livelli") $ l_0={r \}, l_1 \ sottosesta v, \ ldots, l_n \ sottoinsieme V $ in modo tale che $ l_0 \ cup \ ldots \ tazza l_n= v $ e i bordi in uscita dei nodi in L_i $ Connettiti solo ai nodi in $ l_ {I + 1} $ .

Esiste un algoritmo online che può mantenere un insieme di percorsi più corti in quanto più livelli sono aggiunti a questo dag?In altre parole, può rispondere alla query "Qual è il percorso del peso minimo dalla radice a un nodo $ N $ nel livello inferiore del grafico?", AncheCome vengono aggiunti più livelli.

Non riesco a trovare alcuna ricerca affrontare questa domanda.

È stato utile?

Soluzione

Se capisco il tuo problema correttamente, probabilmente non hai trovato alcuna ricerca perché il problema è facile da risolvere.

A meno che non abbia perso qualcosa, vuoi mantenere un DAG "stratificato" da DAG $ g= (l_0, \ cup \ dots \ cup l_k, e) $ (come definito nella tua domanda) e supporta le seguenti due operazioni:

    .
  • init (): Creare un grafico con un solo livello $ l_0 $ , un singolo vertice $ r \ in l_0 $ e senza bordi.

  • Query (): ritorno $ \ min_ {v \ in l_k} d (r, v) $ .

  • add_layer ( $ l_ {k + 1}, e '$ ): ti viene assegnato un nuovo set $ L_ {k + 1} $ di vertici e un set di bordi ponderati $ e '\ SOTETEQ (L_K \ Times L_ {K + 1}) $ . Il set di vertice di $ G $ è aggiornato a $ l_0 \ cup \ ldots \ cup l_k \ tazza l_ {k + 1 } $ e il set di bordo di $ G $ viene aggiornato a $ e \ Cup E '$ .

È possibile eseguire quanto sopra memorizzando: 1) per ogni vertice $ v \ in l_k $ , la distanza $ D [v] $ form $ s $ a $ V $ in $ G $ e 2) la distanza minima $ d ^ * $ da $ s $ a un vertice dell'ultimo livello.

L'operazione di init ammonta all'impostazione $ D [R]= 0 $ . Per eseguire l'operazione di query basta restituire $ d ^ * $ .

Per implementare Add_layer ( $ L_ {k + 1}, E '$ ), si procede come segue:

    .
  • Set $ d ^ * $ a $ + \ INFTY $ ,
  • per ogni vertice $ v \ in l_ {k + 1} $ :
      .
    • Set $ D [V]= + \ INFTY $
    • per ogni bordo $ (u, v) $ in $ e '$ :
        .
      • Aggiornamento $ D [V] $ a $ \ min \ {d [v], d [u] + w (u, v) \} $
    • Aggiorna $ D ^ * $ a $ \ min \ {d ^ *, d [v] \} $

Si noti che ciò richiede tempo proporzionale a $ | l_ {k + 1} | + | E '| $ , ed è quindi asintoticamente ottimale. Notare anche che questa soluzione non ha bisogno di memorizzare $ G $ .

Altri suggerimenti

Supponiamo di avere la lunghezza dei percorsi più corti dalla radice a tutti i nodi nel livello di livello $ l_i $ e chiamare questa classe $ s \ in l_i \ to \ mathbb {z} $ .Ora supporti che i bordi di $ l_i $ a $ l_ {i + 1} $ sono chiamati class="Math-Container"> $ E_i $ .Quindi la lunghezza del percorso più breve per un nodo $ N $ in $ l_ {i + 1} $ è definito da $ \ min \ {w (x, n) + s (x) \ metà (x, n) \ in e_i \} $ .Mantenere i percorsi reali è un'estensione facile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a cs.stackexchange
scroll top