Non sono riuscito a trovare questa struttura di dati, ma non sono un esperto nel settore.
La struttura implementa un set ed è sostanzialmente una matrice di elementi comparabili con un invariante. L'invariante è il seguente (definito in modo ricorsivo):
Un array di lunghezza 1 è un array di unione.
Un array di lunghezza 2 ^ n (per n> 0) è un iff array merge:
- la prima metà è un array di unione e la seconda metà è vuota o
- la prima matrice è piena e ordinata e la seconda metà è una matrice di unione.
Se l'array è pieno, viene ordinato.
Per inserire un elemento, abbiamo due casi:
- Se la prima metà non è piena, inserire ricorsivamente nella prima metà.
- Se la prima metà è piena, inserirla in modo ricorsivo nella seconda metà.
- Dopo il passaggio ricorsivo, se l'intero array è pieno, unisci le metà (che sono ordinate) e ridimensionalo al doppio della sua lunghezza originale.
Per trovare un elemento, ricorrere in entrambe le metà, usando la ricerca binaria quando l'array è pieno. (Questo dovrebbe essere efficiente poiché ci sono al massimo frammenti ascendenti).
La struttura può essere pensata come una versione statica di mergesort.
Non è chiaro cosa si dovrebbe fare per cancellare un elemento.
Modifica: dopo aver migliorato la mia comprensione della struttura.