Ich habe es nicht geschafft, diese Datenstruktur zu finden, bin aber kein Experte auf diesem Gebiet.
Die Struktur implementiert eine Menge und besteht im Wesentlichen aus einer Reihe vergleichbarer Elemente mit einer Invariante. Die Invariante ist die folgende (rekursiv definierte):
Ein Array der Länge 1 ist ein Merge-Array.
Ein Array der Länge 2 ^ n (für n> 0) ist ein Merge-Array, wenn:
- Die erste Hälfte ist ein Merge-Array und die zweite Hälfte ist leer oder
- Das erste Array ist voll und sortiert, und die zweite Hälfte ist ein Merge-Array.
Beachten Sie, dass das Array sortiert wird, wenn es voll ist.
Um ein Element einzufügen, haben wir zwei Fälle:
- Wenn die erste Hälfte nicht voll ist, fügen Sie sie rekursiv in die erste Hälfte ein.
- Wenn die erste Hälfte voll ist, rekursiv in die zweite Hälfte einfügen.
- Wenn das gesamte Array nach dem rekursiven Schritt voll ist, führen Sie die sortierten Hälften zusammen und ändern Sie die Größe auf das Doppelte der ursprünglichen Länge.
Um ein Element zu finden, verwenden Sie die Binärsuche in beiden Hälften, wenn das Array voll ist. (Dies sollte effizient sein, da höchstens aufsteigende Fragmente vorhanden sind.)
Die Struktur kann als statische Version von Mergesort betrachtet werden.
Es ist nicht klar, was man tun soll, um ein Element zu löschen.
Edit: nachdem ich die Struktur besser verstanden habe.
quelle
Antworten:
Sie beschreiben die klassische logarithmische Bentley-Saxe-Methode , die auf statisch sortierte Arrays angewendet wird. Dieselbe Idee kann verwendet werden, um die Unterstützung für Einfügungen in eine statische Datenstruktur (keine Einfügungen oder Löschungen) für ein zersetzbares Suchproblem hinzuzufügen. (Ein Suchproblem ist zerlegbar, wenn die Antwort für eine Vereinigung leicht aus den Antworten für die Mengen A und B berechnet werden kann .) Die Transformation erhöht die amortisierte Abfragezeit um den Faktor O ( log n ) (sofern dies nicht der Fall war) schon größer als ein Polynom in nA ∪ B EIN B O ( logn ) n ), erhöht aber den Platz nur um einen konstanten Faktor. Ja, dank Overmars und van Leeuwen kann es abgeschafft werden, aber das wollen Sie wirklich nicht, wenn Sie es nicht müssen.
Diese Hinweise behandeln die Grundlagen.
Cache-ahnungslose Lookahead-Arrays sind die mutierten Nachkommen von Bentley-Saxe- und van Emde Boas-Bäumen auf Steroiden.
quelle
Dies ähnelt einer logarithmisch strukturierten Zusammenführungsstruktur oder einem Cache für nicht bekannte Lookahead-Arrays (oder COLAs).
quelle