Je n'ai pas réussi à trouver cette structure de données, mais je ne suis pas un expert dans le domaine.
La structure implémente un ensemble et est essentiellement un tableau d'éléments comparables avec un invariant. L'invariant est le suivant (défini récursivement):
Un tableau de longueur 1 est un tableau de fusion.
Un tableau de longueur 2 ^ n (pour n> 0) est un tableau de fusion ssi:
- la première moitié est un tableau de fusion et la seconde moitié est vide ou
- le premier tableau est plein et trié, et la seconde moitié est un tableau de fusion.
Notez que si le tableau est plein, il est trié.
Pour insérer un élément, nous avons deux cas:
- Si la première moitié n'est pas pleine, insérez récursivement dans la première moitié.
- Si la première moitié est pleine, insérez récursivement dans la seconde moitié.
- Après l'étape récursive, si le tableau entier est plein, fusionnez les moitiés (qui sont triées) et redimensionnez-le au double de sa longueur d'origine.
Pour trouver un élément, récursivement dans les deux moitiés, en utilisant la recherche binaire lorsque le tableau est plein. (Cela devrait être efficace car il y a au plus fragments ascendants).
La structure peut être considérée comme une version statique de mergesort.
Il n'est pas clair ce que l'on doit faire pour effacer un élément.
Edit: après avoir amélioré ma compréhension de la structure.