Prueba / identificación de una clasificación topológica

8

Que le den un conjunto de Dirigido acíclicos gráficos G 1 , G 2 , . . . , G n sobre el mismo conjunto de vértices . También se le da una permutación del conjunto de vértices . ¿Cuál es el mejor algoritmo que podría identificar los gráficos entre que tienen como un tipo topológico? ¿Podría alguien probar si es una especie topológica de un DAG sobre en tiempo sub-lineal? nortesol1,sol2,...,solnorteV ( v 1 , v 2 , . . . , v m ) G 1 , G 2 , . . . , G n ( v 1 , v 2 , . . . , V m ) ( v 1 , v 2 , . . . , V m ) G VmetroV(v1,v2,...,vmetro)G1,G2,...,Gn(v1,v2,...,vm)(v1,v2,...,vm)GV

Hsien-Chih Chang 張顯 之
fuente
66
¿Puede construir una estructura de datos basada en el conjunto de gráficos antes de que se le presente el orden de los vértices? Debe observar todos los gráficos y todos los bordes m - 1 en el orden, por lo que, a menos que se le permita preprocesar los gráficos de alguna manera, no parece que pueda vencer el tiempo lineal. nm1
mjqxxxx
Hsien-Chih Chang, ¿cuál sería una buena técnica de preprocesamiento que pueda permitir una mejor solución? ¿Algún tipo de hashing? Supongo que puedes vencer el tiempo lineal si puedes aproximar la solución (algoritmo probabilístico).
user2471
@ user2471: Como dije en tu respuesta anterior, esta publicación fue escrita por @Steve, no yo;)
Hsien-Chih Chang 張顯 之
Lo siento Hsien-Chih Chang, mi pregunta fue para todos :)
user2471
@ user2471, ¡no es necesario disculparse! Espero que alguien que esté familiarizado con esta pregunta publique una buena respuesta: D
Hsien-Chih Chang 張顯 之

Respuestas:

3

Esto se puede hacer en un tiempo casi lineal.

Deje que la permutación sea , y deje que k = k ( π ) sea ​​el número de pasos necesarios para verificar una sola arista ( u , v ) contra π . Entonces es suficiente verificar que cada uno de los bordes M i de G i sea ​​compatible con π , lo que se puede hacer en el tiempo O ( k M i ) u O ( k π=(v1,...,vmetro)k=k(π)(tu,v)πMETROyosolyoπO(kMETROyo) general.O(kMETROyo)

Al preprocesar se puede reducir k a dos búsquedas en una matriz que contiene m entradas cada una de logπkmetrotamaño m , y una comparación entre dosentradas ( log m ) -bit en la matriz; el elemento de matriz a [ w ] contiene el índice de w en π considerado como una lista ordenada. Esto significa que k = O ( logIniciar sesiónmetro(Iniciar sesión metro)una[w]wπ produciendo O ( ( logk=O(Iniciar sesiónmetro) tiempo total para el límite superior.O((Iniciar sesiónmetro)METROyo)

Como @mjqxxxx señala, cada borde de cada gráfico puede ser relevante. Esto crea un límite inferior de pasos de , donde KΩ(KMETROyo)K es la menor cantidad de trabajo que debe hacerse para cada borde del gráfico; es posible que algunos enfoques puedan amortizar el costo para que . Esto todavía va a ser Ω ( M i )K=o(Iniciar sesiónmetro)Ω(METROyo) en el mejor de los casos, por lo que no queda mucho espacio.

András Salamon
fuente
Qué algoritmo se puede usar para hacer k = log m. ¿Es sufijo de árboles?
vincent mathew
0

Método trivial

GS = {G1,G2...G3}
for v in (v1,v2,...vm)
      remove all graphs from GS where indegree(v) != 0
      remove v and attached edges from remaining GS

No es tan rápido como quieras. Pero resuelve un problema de que "puede haber múltiples ordenamientos topológicos válidos de DAG". Y encontrarlos a todos no es una buena idea.

Pratik Deoghare
fuente