Estou procurando uma solução para o seguinte problema e me pergunto se alguém poderia me indicar alguma pesquisa existente sobre esse tópico. Como venho de uma aplicação de gráfico no mundo real, tenha paciência comigo se minha terminologia não estiver exatamente correta.
Eu tenho um sistema de banco de dados onde o usuário pode adicionar / remover / mover objetos criando / excluindo e alterando relacionamentos. Como tal, posso ver os objetos como vértices em um gráfico e os relacionamentos com arestas e arestas podem ser ponderadas dependendo do tipo de relacionamento (composição, associação ou agregação).
Do ponto de vista do usuário, adicionar um novo elemento pode ser um único clique e, sob o capô, o programa cria um gráfico de objetos vinculados por relacionamentos. Este gráfico é então adicionado ao gráfico principal que define todo o banco de dados. A remoção de um elemento seria o inverso onde os links / arestas são desconectados e o gráfico se torna dois gráficos separados, onde 1 é o banco de dados e o outro consiste em vértices formados pelo elemento e seus subelementos.
Eu preciso de uma maneira muito rápida de determinar quando eu tenho gráficos disjuntos e quando 2 gráficos disjuntos se tornam 1 novamente. Dei uma breve olhada em Holm, de Lichtenberg e Thorup ( 2001 ; pdf ). Parece o caminho a seguir, mas o autor mencionou que eles estão apenas considerando um gráfico com número fixo de vértices. Apenas imaginando, os algoritmos geralmente se estendem à adição / remoção de vértices apenas executando a adição de arestas de forma incremental? Ou houve trabalhos personalizados especificamente para esse cenário?
fonte