Problem
Ich habe ein ungerichtetes Diagramm (mit mehreren Kanten), das sich mit der Zeit ändert. Knoten und Kanten können eingefügt und gelöscht werden. Bei jeder Änderung des Diagramms muss ich die verbundenen Komponenten dieses Diagramms aktualisieren.
Eigenschaften
Zusätzliche Eigenschaften sind, dass keine zwei Komponenten jemals wieder verbunden werden. Offensichtlich kann der Graph Zyklen bis zu einem beliebigen Betrag aufweisen (andernfalls wäre die Lösung trivial). Wenn eine Kante keinen Knoten , wird dieser Knoten niemals übernommen. Wenn jedoch , kann es in geändert werden .
Nähert sich
Bisher habe ich zwei mögliche Ansätze, aber wie Sie sehen werden, sind sie schrecklich:
Langsam zustandslos
Ich kann die Grafik jedes Mal ab den geänderten Elementen durchsuchen (dfs / bfs). Dies spart Platz, ist aber langsam, da wir für jede Modifikation O (n + m) haben.
Stateful schneller (-er) (?) Ansatz
Ich kann alle möglichen Pfade für jeden Knoten zu allen möglichen Knoten speichern, aber wenn ich es richtig sehe, wird dies O (n ^ 4) Speicher beanspruchen. Ich bin mir jedoch nicht sicher, wie die Laufzeitverbesserung ist (falls es überhaupt eine gibt, da ich die Informationen für jeden Knoten in derselben Komponente auf dem neuesten Stand halten muss).
Frage
Haben Sie Hinweise, wie ich mehr über dieses Problem erfahren kann, oder vielleicht einige Algorithmen, auf denen ich aufbauen kann?
Hinweis
Wenn es eine enorme Verbesserung der Laufzeit / des Speichers gibt, könnte ich mit einer nicht optimalen Lösung leben, die manchmal besagt, dass zwei Komponenten eine sind, aber ich würde natürlich eine optimale Lösung vorziehen.