Wir haben eine Menge von Listen von Elementen aus der Menge . Jedes Element von wird in einer einzigen Liste in . Ich suche eine Datenstruktur, die die folgenden Aktualisierungen durchführen kann:
: Verkettet die Liste mit mit dem Ende der Liste mit
: Teilt die Liste mit direkt nach
Außerdem müssen die folgenden Abfragen ausgeführt werden:
: gibt zurück wenn und in derselben Liste sind und nach (aber nicht unbedingt neben )
: Gibt das erste Element der Liste zurück, das
: Gibt das nächste Element nach in der Liste zurück, die
Ich habe bereits eine Datenstruktur entwickelt, die diese Aktualisierungen in und Abfragen in Zeit durchführt. Mich interessiert vor allem, ob es bereits eine Datenstruktur gibt, die dies kann (hoffentlich schneller?).
Motivation: Verwurzelte gerichtete Wälder können mit zwei dieser Listensätze dargestellt werden und ermöglichen eine schnelle Berechnung der Erreichbarkeit in solchen Wäldern. Ich möchte sehen, wofür sie sonst noch verwendet werden können und ob all dies bereits bekannt ist.
Das am wenigsten verbreitete Vorfahrenproblem kann verwendet werden, um das Erreichbarkeitsproblem in dynamisch verwurzelten Bäumen zu lösen. Ich kann mir daher vorstellen, dass Sie auch an folgenden Themen interessiert sind: Optimale Algorithmen zum Finden der nächsten gemeinsamen Vorfahren in dynamischen Bäumen von Alstrup und Thorup. In diesem Dokument wird eine Zeitgrenze von für Links und nca-Abfragen auf einem Zeigercomputer angegeben.O(n+mloglogn) n m
quelle