Problema
Eu tenho um gráfico não direcionado (com várias arestas), que mudará com o tempo, nós e arestas podem ser inseridos e excluídos. Em cada modificação do gráfico, eu tenho que atualizar os componentes conectados deste gráfico.
Propriedades
As propriedades adicionais são que nunca dois componentes serão reconectados. Obviamente, o gráfico pode ter ciclos para uma quantia arbitrária (caso contrário, a solução seria trivial). Se uma aresta não contiver um nó n , nunca adotará esse nó. No entanto, se n ∈ e , ele pode mudar para n ∉ e .
Abordagens
Até agora, tenho duas abordagens possíveis, mas como você verá, elas são horríveis:
Lento sem estado
Posso pesquisar (dfs / bfs) o gráfico a partir do (s) elemento (s) modificado (s) toda vez. Isso economiza espaço, mas é lento, pois temos O (n + m) para cada modificação.
Abordagem rápida com estado (-er) (?)
Posso armazenar todos os caminhos possíveis para cada nó em todos os nós possíveis, mas se eu o vir corretamente, isso consumirá memória O (n ^ 4). Mas não tenho certeza de como é a melhoria do tempo de execução (se houver uma, porque preciso manter as informações atualizadas para cada nó no mesmo componente).
Questão
Você tem alguma dica, como posso aprender mais sobre esse problema ou talvez sobre alguns algoritmos em que posso desenvolver?
Nota
Se houver uma grande melhoria no tempo de execução / memória, eu poderia viver com uma solução não ideal que às vezes diz que dois componentes são um, mas é claro que eu preferiria uma solução ideal.