Quelqu'un que je connais envisage d'implémenter un éditeur de texte dans un avenir proche, ce qui m'a incité à réfléchir au type de structures de données rapides pour un éditeur de texte. Les structures les plus utilisées sont apparemment des cordes ou des tampons d'espacement .
Les arbres Van Emde Boas sont à peu près les files d'attente prioritaires les plus rapides, si cela ne vous dérange pas une limite supérieure sur le nombre d'articles que vous pouvez y mettre et un coût d'initialisation élevé. Ma question est de savoir s'il existe une structure de données aussi rapide que l'arbre van Emde Boas, mais qui prend en charge les opérations de l'éditeur de texte.
Nous devons uniquement prendre en charge jusqu'à caractères dans notre structure de données (donc si , nous prenons en charge jusqu'à 4 Go de caractères ASCII). Nous avons temps pour initialiser une nouvelle structure de données. Nous souhaitons soutenir les opérations suivantes:
- Insérez un caractère à la position dans (et augmentez ainsi la position de chaque caractère suivant de 1).
- Supprimez un caractère à la position dans .
- Renvoie le caractère à la position dans .
Ainsi, l'insertion (0, 'a') suivie de l'insertion (0, 'b') donne "ba".
Encore mieux serait ceci:
- Renvoie un «pointeur» vers un index dans .
- Étant donné un «pointeur», renvoyez le caractère à cette position dans .
- Étant donné un «pointeur», supprimez le caractère à cette position dans .
- Étant donné un «pointeur», ajoutez un caractère à cette position dans et renvoyez un pointeur à la position suivante.
- (facultatif) Étant donné un «pointeur», renvoyez un «pointeur» au caractère suivant / précédent dans .
la source