Gibt es ein Äquivalent von Van-Emde-Boas-Bäumen für Seile?


23

Jemand, den ich kenne, plant in naher Zukunft die Implementierung eines Texteditors, was mich dazu veranlasste, darüber nachzudenken, welche Art von Datenstrukturen für einen Texteditor schnell sind. Die am häufigsten verwendeten Strukturen sind offenbar Seile oder Spaltpuffer .

Van-Emde-Boas-Bäume gehören zu den Warteschlangen mit der schnellsten Priorität, wenn Sie sich nicht um eine Obergrenze für die Anzahl der darin enthaltenen Elemente und einen hohen Initialisierungsaufwand kümmern. Meine Frage ist, ob es eine Datenstruktur gibt, die genauso schnell ist wie der Van-Emde-Boas-Baum, aber Texteditor-Operationen unterstützt.

Wir müssen nur bis zu Zeichen in unserer Datenstruktur unterstützen (wenn also log m = 32 ist , dann unterstützen wir ASCII-Zeichen im Wert von bis zu 4 GB). Wir dürfen mLogm=32 Zeit zum Initialisieren einer neuen Datenstruktur. Wir möchten folgende Operationen unterstützen:m

  • Fügen Sie ein Zeichen an der Position in O ( log log m ) ein (und erhöhen Sie dadurch die Position jedes nachfolgenden Zeichens um 1).ichO(LogLogm)
  • Löschen Sie ein Zeichen an Position in O ( log log m ) .ichO(LogLogm)
  • Geben Sie das Zeichen an Position in O zurück ( log log m ) .ichO(LogLogm)

Also, Einfügen (0, 'a') gefolgt von Einfügen (0, 'b') ergibt "ba".

Noch besser wäre dies:

  • Geben Sie einen Zeiger auf einen Index in O zurück ( log log m ) .ichO(LogLogm)
  • Geben Sie bei einem 'Zeiger' das Zeichen an dieser Position in .O(1)
  • Entfernen Sie mit einem 'Zeiger' das Zeichen an dieser Position in .O(1)
  • Fügen Sie bei einem 'Zeiger' an dieser Position in ein Zeichen hinzu und setzen Sie einen Zeiger an die folgende Position zurück.O(1)
  • (optional) Geben Sie bei einem 'Zeiger' einen 'Zeiger' zum nächsten / vorherigen Zeichen in .O(1)

Antworten:


14

Fredman und Saks zeigen in "Die Zellprüfkomplexität dynamischer Datenstrukturen", dass Sie nicht besser als Amortisierte Zeit für die Operationen, die Sie suchen. Sie nennen dieses Problem "Listendarstellung".Θ(lgmlglgm)

Dietz präsentierte eine Datenstruktur in "Optimale Algorithmen für Listenindizierung und Teilmengenrang" , die diese Grenze erreicht.


Können Sie einen Link für den ersten Artikel angeben?
Raphael

Mir ist keine kostenlose Version bekannt.
Jbapple
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.