Numero di vertici raggiungibili in DAG per ogni vertice


11

Sia un grafico diretto aciclico, in modo tale che fuori grado di ogni vertice sia O ( log | V | ) . Per ogni vertice di G possiamo contare il numero di vertici raggiungibili, semplicemente eseguendo dfs da ogni vertice e questo richiederà tempo O ( | V | | E | ) . C'è un modo migliore per risolvere questo problema?G(V,E)O(log|V|)GO(|V||E|)



1
@Radu è un duplicato semplice? suona così
Suresh Venkat,

@Suresh, rispetto alla mia domanda, questo ha un limite superiore in termini di vertici e non richiede limiti inferiori. Queste sono piccole differenze secondo me, quindi lo considero un duplicato, ma non mi sento fortemente al riguardo.
Radu GRIGore,

1
ok quindi lo lasceremo così com'è.
Suresh Venkat,

4
La risposta di virgi alla mia domanda implica un algoritmo per questo. O(|V|2)
Radu GRIGore,

Risposte:



-1

Non sono un esperto qui, ci proverò.

1) Dal momento che è DAG, dovrebbe avere un vertice di sink ovvero un vertice con un livello superiore 0. Trova un vertice di sink come x e aggiungi {x} come vertice raggiungibile a Neighbor (x). rimuovere x e ripetere il processo fino a quando il grafico diventa vuoto


Dato che l' out-grade è limitato, sembrerebbe più utile iniziare con una fonte?
András Salamon,

@ andras-salamon: no, perché non sai banalmente quanti nodi sono raggiungibili da una fonte. Ma non lo fai (zero) per un lavandino.
Martin B.

O(|V||E|)xO(|V|)O(|V|)O(|V|)O(|V||E|)

-2

(Simile alla soluzione di Prabu ... ma più dettagliata)

N(v)vreach(v)

  1. O(|V|+|E|)
  2. vreach(v)=nN(v)reach(n)

|E|O(|V|+|E|)

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.