Problème
J'ai un graphique non orienté (avec plusieurs arêtes), qui changera au fil du temps, des nœuds et des arêtes peuvent être insérés et supprimés. A chaque modification du graphe, je dois mettre à jour les composants connectés de ce graphe.
Propriétés
Les propriétés supplémentaires sont qu'aucun composant ne sera jamais reconnecté. Évidemment, le graphique peut avoir des cycles à une quantité arbitraire (sinon la solution serait triviale). Si un bord ne contient pas de nœud n , il n'adoptera jamais ce nœud. Cependant, si n ∈ e , il peut changer en n ∉ e .
Approches
Jusqu'à présent, j'ai deux approches possibles, mais comme vous le verrez, elles sont horribles:
Lent sans état
Je peux rechercher (dfs / bfs) le graphe à partir des éléments modifiés à chaque fois. Cela conserve de l'espace, mais est lent car nous avons O (n + m) pour chaque modification.
Approche rapide (-er) (?) Dynamique
Je peux stocker tous les chemins possibles pour chaque nœud vers tous les nœuds possibles, mais si je le vois correctement, cela prendra de la mémoire O (n ^ 4). Mais je ne sais pas comment est l'amélioration de l'exécution (s'il y en a une, car je dois garder les informations à jour pour chaque nœud du même composant).
Question
Avez-vous des conseils, comment puis-je en savoir plus sur ce problème ou peut-être quelques algorithmes sur lesquels je peux construire?
Remarque
S'il y a une grande amélioration de l'exécution / mémoire, je pourrais vivre avec une solution non optimale qui dit parfois que deux composants sont un, mais bien sûr, je préférerais une solution optimale.