Número de vértices alcanzables en DAG para cada vértice


11

Sea un gráfico dirigido acíclico, de modo que el grado de salida de cualquier vértice sea O ( log | V | ) . Para cada vértice de G podemos contar el número de vértices alcanzables, simplemente ejecutando dfs desde cada vértice y esto llevará tiempo O ( | V | | E | ) . ¿Hay una mejor manera de resolver este problema?G(V,E)O(log|V|)GO(|V||E|)



1
@Radu, ¿es un duplicado directo? suena así
Suresh Venkat

@Suresh, en comparación con mi pregunta, esta tiene un límite superior en el grado de vértice y no solicita límites inferiores. Estas son pequeñas diferencias en mi opinión, por lo que lo consideraría un duplicado, pero no me siento muy convencido.
Radu GRIGore

1
ok, entonces lo dejaremos como está.
Suresh Venkat

44
La respuesta de Virgi a mi pregunta implica un algoritmo para este. O(|V|2)
Radu GRIGore

Respuestas:



-1

No soy un experto aquí, lo intentaré.

1) Dado que es DAG, debe tener un vértice de sumidero, es decir, un vértice con un grado inferior 0. Busque un vértice de sumidero que diga x y agregue {x} como vértice accesible al vecino (x). elimine xy repita el proceso hasta que el gráfico quede vacío


Dado que el grado externo está limitado, ¿parece ser más útil comenzar con una fuente?
András Salamon

@ andras-salamon: no, porque no sabes trivialmente cuántos nodos son accesibles desde una fuente. Sin embargo, no haces eso (cero) para un sumidero.
Martin B.

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

-2

(Similar a la solución de Prabu ... pero más detallada)

N(v)vreach(v)

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

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.