Хтось, кого я знаю, планує впровадити текстовий редактор найближчим часом, що спонукало мене задуматися про те, які структури даних швидкі для текстового редактора. Найбільш використовувані структури - це, мабуть, канати або щілинні буфери .
Дерева Van Emde Boas - це лише найшвидші черги з пріоритетними напрямками, якщо ви не заперечуєте проти верхньої межі кількості елементів, які ви можете помістити в нього, і великої вартості ініціалізації. Моє запитання - чи існує якась структура даних, яка настільки ж швидка, як і дерево Емде Боаса, але підтримує операції з редагуванням тексту.
Нам потрібно підтримувати до символів у нашій структурі даних (тож якщо , то ми підтримуємо ASCII символами до 4 Гб). Нам дозволено час ініціалізувати нову структуру даних. Ми хотіли б підтримати наступні операції:
- Вставте символ у позиції в (і тим самим збільште позицію кожного наступного символу на 1).
- Видаліть символ у позиції в .
- Поверніть символ у позицію в .
Отже, вставка (0, 'а'), а потім вставка (0, 'б') призводить до "ба".
Ще краще було б таке:
- Повернути 'покажчик' до деякого індексу в .
- Давши 'покажчик', поверніть символ у цій позиції в .
- Давши «вказівник», видаліть символ у цій позиції в .
- Давши 'покажчик', додайте символ у цій позиції в та поверніть вказівник у наступне положення.
- (необов’язково) Дано «вказівник», поверніть «вказівник» на наступний / попередній символ у .