Für einen sich ändernden gerichteten Graphen möchte ich Informationen über stark verbundene Komponenten pflegen. Die Diagrammoperationen sind inkrementell: nur Scheitelpunktaddition und Kantenaddition. Welche Datenstrukturen erzielen für diese Operationen die bekannteste amortisierte Komplexität?
Wenn der Graph ungerichtet wäre, wäre die Antwort die Union-Find-Struktur. Und da ungerichtete Graphen als Sonderfälle gerichteter Graphen angesehen werden können, überträgt sich die (noch so geringfügige) superkonstante Untergrenze.
Für eine lineare Obergrenze können die stark verbundenen Komponenten nach jeder Kantenaddition von Grund auf neu berechnet werden, ohne dass Daten recycelt werden müssen. Ich frage mich, ob es einen Weg gibt, es besser zu machen.
In der Umgebung, in der ich dies benötige, erwarte ich, dass nicht triviale SCCs eher die Ausnahme als die Regel sind. Und wenn keine Zyklen vorhanden sind, kann ich insgesamt eine lineare Zeit erreichen (dh eine amortisierte konstante Zeit pro Operation). [EDIT:] Lassen Sie mich klarstellen, was ich meine. Natürlich muss ich in Abwesenheit von Zyklen die SCCs überhaupt nicht verfolgen. Die amortisierte konstante Zeit ist für das, was ich in meiner Umgebung mache , außer für die Sorge um SCCs.
Daher würde mich auch Datenstrukturen interessieren, die im Allgemeinen nicht besser als die obige Obergrenze sind, aber eine amortisierte konstante Zeit pro Operation verwenden, solange der Graph eine DAG bleibt.