Angenommen, ich habe ein ungerichtetes Diagramm mit endlicher Dichte und muss in der Lage sein, die folgenden Abfragen effizient auszuführen:
- - gibt wenn zwischen und ein Pfad besteht , andernfallsN 1 N 2 F.
- - Gibt die Menge der Knoten zurück, die von aus erreichbar sind
Dies ist einfach durch Vorberechnung der verbundenen Komponenten des Diagramms möglich. Beide Abfragen können in -Zeit ausgeführt werden.
Wenn ich auch willkürlich Kanten hinzufügen muss - -, kann ich die Komponenten in einer disjunkten Datensatzstruktur speichern . Wenn eine Kante hinzugefügt wird und zwei Knoten in verschiedenen Komponenten verbunden werden, werden diese Komponenten zusammengeführt. Dies addiert Kosten zu und Kosten zu und (die genauso gut O (1) sein können ).A D d E d g e O ( I n v e r s e A c k e r m a n n ( | N o d e s | ) ) I s C o n n e c t e d C o n n e c t e d N oO ( 1 )
Wenn ich auch in der Lage sein muss, Kanten willkürlich zu entfernen, welche Datenstruktur ist für diese Situation am besten geeignet? Ist man bekannt? Zusammenfassend sollte es die folgenden Operationen effizient unterstützen:
- - liefert , wenn es einen Weg zwischen ist und , sonst .
- - Gibt die Menge der Knoten zurück, die von N aus erreichbar sind .
- - Fügt eine Kante zwischen zwei Knoten hinzu. Beachten Sie, dass , oder beide möglicherweise noch nicht vorhanden waren.
- - Entfernt eine vorhandene Kante zwischen zwei Knoten.
(Ich interessiere mich aus der Perspektive der Spieleentwicklung dafür - dieses Problem scheint in einigen Situationen aufzutreten. Vielleicht kann der Spieler Stromleitungen bauen und wir müssen wissen, ob ein Generator an ein Gebäude angeschlossen ist. Vielleicht kann der Spieler sperren und Türen aufschließen, und wir müssen wissen, ob ein Feind den Spieler erreichen kann. Aber es ist ein sehr allgemeines Problem, also habe ich es als solches formuliert.