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.