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.