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:
- Inserire un carattere nella posizione in (e quindi aumentare la posizione di ogni carattere successivo di 1).
- Elimina un carattere nella posizione in .
- Restituisce il carattere nella posizione in .
Quindi, insert (0, 'a') seguito da insert (0, 'b') genera "ba".
Ancora meglio sarebbe questo:
- Restituisce un 'puntatore' ad un indice in .
- Dato un 'puntatore', riporta il personaggio in questa posizione in .
- Dato un 'puntatore', rimuovi il carattere in questa posizione in .
- Dato un 'puntatore', aggiungi un carattere in questa posizione in e riporta un puntatore nella seguente posizione.
- (facoltativo) Dato un 'puntatore', restituisce un 'puntatore' al carattere successivo / precedente in .