Problema
Tengo un gráfico no dirigido (con múltiples bordes), que cambiará con el tiempo, los nodos y los bordes se pueden insertar y eliminar. En cada modificación del gráfico, tengo que actualizar los componentes conectados de este gráfico.
Propiedades
Las propiedades adicionales son que no se volverán a conectar dos componentes. Obviamente, el gráfico puede tener ciclos a una cantidad arbitraria (de lo contrario, la solución sería trivial). Si un borde no contiene un nodo n , nunca adoptará ese nodo. Sin embargo, si n ∈ e , puede cambiar a n ∉ e .
Enfoques
Tengo dos enfoques posibles hasta ahora, pero como verán, son horribles:
Lento sin estado
Puedo buscar (dfs / bfs) el gráfico a partir de los elementos modificados cada vez. Esto ahorra espacio, pero es lento ya que tenemos O (n + m) para cada modificación.
Enfoque rápido (-er) (?) Con estado
Puedo almacenar todas las rutas posibles para cada nodo a todos los nodos posibles, pero si lo veo correctamente, esto tomará O (n ^ 4) memoria. Pero no estoy seguro de cómo es la mejora del tiempo de ejecución (si es que hay una, porque tengo que mantener la información actualizada para cada nodo en el mismo componente).
Pregunta
¿Tiene alguna sugerencia, cómo puedo aprender más sobre ese problema o quizás algunos algoritmos sobre los que puedo construir?
Nota
Si hay una gran mejora en el tiempo de ejecución / memoria, podría vivir con una solución no óptima que a veces dice que dos componentes son uno, pero, por supuesto, preferiría una solución óptima.
fuente
Respuestas:
Hay varias estructuras de datos que admiten inserciones de bordes, eliminaciones de bordes y consultas de conectividad (¿están estos dos vértices en el mismo componente conectado?) En tiempo pollogarítmico.
Monika R. Henzinger y Valerie King. Algoritmos de gráficos aleatorios totalmente dinámicos con tiempo pollogarítmico por operación . Revista de la ACM 46 (4): 502-516, 1999.
Jacob Holm, Kristian de Lichtenberg y Mikkel Thorup. Algoritmos determinísticos polilogarítmicos totalmente dinámicos para conectividad, árbol de expansión mínimo, 2 bordes y biconnectividad , Journal of the ACM 48 (4): 723-760, 2001.
Mikkel Thorup. Conectividad gráfica totalmente dinámica casi óptima . Proc. 32o STOC 343-350, 2000.
fuente
Creo que está buscando lo que se llama el algoritmo de gráfico dinámico para la descomposición de componentes conectados. El algoritmo de Holm, de Lichtenberg y Thorup [HLT01] ha amortizado el tiempo pollogarítmico en cada actualización de borde. Ha pasado mucho tiempo desde que examiné el problema la última vez, por lo que probablemente haya un progreso más reciente.
[HLT01] Jacob Holm, Kristian de Lichtenberg y Mikkel Thorup. Algoritmos determinísticos polilogarítmicos totalmente dinámicos para conectividad, árbol de expansión mínimo, 2 bordes y biconnectividad. Journal of the ACM , 48 (4): 723–760, julio de 2001. http://doi.acm.org/10.1145/502090.502095
fuente
(Por ahora, permítanme seguir con las consultas de conectividad, que desafortunadamente pueden no ser suficientes para su aplicación).
Gran parte del trabajo anterior sobre el problema de la conectividad dinámica está en el modelo de actualización de bordes: se supone que el número de vértices es fijo, y se pueden insertar y / o eliminar bordes al realizar consultas. Si solo puede insertar (eliminar), eso es incremental (decremental). Si puede hacer ambas cosas, eso es completamente dinámico. El trabajo de Thorup como lo señaló JeffE (y yo en el comentario) son para actualizaciones de borde.
AFAIK, la comunidad de teoría CS solo está comenzando a buscar actualizaciones de vértices para gráficos generales. Chan, Pătraşcu y Roditty realizaron un trabajo innovador al respecto en FOCS 2008. Consulte este enlace para obtener una revisión muy reciente (septiembre de 2010) y las referencias que contiene.
fuente