Y a-t-il un équivalent d'arbres van Emde Boas pour les cordes?

23

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:mlogm=32m

  • Insérez un caractère à la position dans (et augmentez ainsi la position de chaque caractère suivant de 1).iO(loglogm)
  • Supprimez un caractère à la position dans .iO(loglogm)
  • Renvoie le caractère à la position dans .iO(loglogm)

Ainsi, l'insertion (0, 'a') suivie de l'insertion (0, 'b') donne "ba".

Encore mieux serait ceci:

  • Renvoie un «pointeur» vers un index dans .iO(loglogm)
  • Étant donné un «pointeur», renvoyez le caractère à cette position dans .O(1)
  • Étant donné un «pointeur», supprimez le caractère à cette position dans .O(1)
  • Étant donné un «pointeur», ajoutez un caractère à cette position dans et renvoyez un pointeur à la position suivante.O(1)
  • (facultatif) Étant donné un «pointeur», renvoyez un «pointeur» au caractère suivant / précédent dans .O(1)
Alex ten Brink
la source

Réponses:

14

Fredman et Saks montrent dans "La complexité de la sonde cellulaire des structures de données dynamiques" que vous ne pouvez pas faire mieux que temps amorti pour les opérations que vous êtes à la recherche de. Ils appellent ce problème la "représentation de liste".Θ(lgmlglgm)

Dietz a présenté une structure de données dans "Algorithmes optimaux pour l'indexation de liste et le rang de sous-ensemble" qui atteint cette limite.

jbapple
la source
Pouvez-vous donner un lien pour le premier article?
Raphael
Il n'y a pas de version gratuite à ma connaissance.
jbapple