Esiste un equivalente di Van Emde Boas per le corde?


23

Qualcuno che conosco sta pianificando di implementare un editor di testo nel prossimo futuro, il che mi ha spinto a pensare a che tipo di strutture di dati sono veloci per un editor di testo. Le strutture più utilizzate sono apparentemente corde o buffer di spazio .

Gli alberi di Van Emde Boas sono quasi le code prioritarie più veloci in circolazione, se non ti dispiace un limite superiore sul numero di elementi che puoi inserire e un grande costo di inizializzazione. La mia domanda è se esiste una struttura di dati che è veloce quanto l'albero di Van Emde Boas, ma supporta le operazioni dell'editor di testo.

Abbiamo solo bisogno di supportare fino a caratteri nella nostra struttura di dati (quindi se , allora supportiamo fino a 4 GB di caratteri ASCII). Ci è concesso tempo per inizializzare una nuova struttura di dati. Vorremmo supportare le seguenti operazioni:mlogm=32m

  • Inserire un carattere nella posizione in (e quindi aumentare la posizione di ogni carattere successivo di 1).iO(loglogm)
  • Elimina un carattere nella posizione in .iO(loglogm)
  • Restituisce il carattere nella posizione in .iO(loglogm)

Quindi, insert (0, 'a') seguito da insert (0, 'b') genera "ba".

Ancora meglio sarebbe questo:

  • Restituisce un 'puntatore' ad un indice in .iO(loglogm)
  • Dato un 'puntatore', riporta il personaggio in questa posizione in .O(1)
  • Dato un 'puntatore', rimuovi il carattere in questa posizione in .O(1)
  • Dato un 'puntatore', aggiungi un carattere in questa posizione in e riporta un puntatore nella seguente posizione.O(1)
  • (facoltativo) Dato un 'puntatore', restituisce un 'puntatore' al carattere successivo / precedente in .O(1)

Risposte:


14

Fredman e Saks mostrano in "La complessità della sonda cellulare delle strutture di dati dinamici" che non puoi fare meglio di tempo ammortizzato per le operazioni che stai eseguendo cercando. Chiamano questo problema "rappresentazione elenco".Θ(lgmlglgm)

Dietz ha presentato una struttura di dati in "Algoritmi ottimali per l'indicizzazione degli elenchi e il rango di sottoinsieme" che raggiunge questo limite.


Puoi dare un link per il primo articolo?
Raffaello

Non esiste una versione gratuita di cui sono a conoscenza.
jbapple
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.