Ktoś, kogo znam, planuje wdrożyć edytor tekstu w najbliższej przyszłości, co skłoniło mnie do zastanowienia się, jakie struktury danych są szybkie dla edytora tekstu. Najczęściej stosowanymi konstrukcjami są najwyraźniej liny lub bufory szczelinowe .
Drzewa Van Emde Boas są prawie najszybszymi kolejkami priorytetowymi, jeśli nie przeszkadza ci górna granica liczby przedmiotów, które możesz w nie umieścić, i duży koszt inicjalizacji. Moje pytanie dotyczy tego, czy istnieje struktura danych, która jest tak szybka jak drzewo van Emde Boasa, ale obsługuje operacje edytora tekstu.
W naszej strukturze danych musimy obsługiwać maksymalnie znaków (więc jeśli , to obsługujemy znaki ASCII o wartości do 4 GB). Możemy czas na zainicjowanie nowej struktury danych. Chcielibyśmy wspierać następujące operacje:
- Wstaw znak w pozycji do O ( log log m ) (a tym samym zwiększając pozycję każdego kolejnego znaku o 1).
- Usuń znak z pozycji w O ( log log m ) .
- Zwraca znak w pozycji w O ( log log m ) .
Zatem wstawienie (0, „a”), a następnie wstawienie (0, „b”) powoduje „ba”.
Jeszcze lepiej byłoby to:
- Zwraca „wskaźnik” do jakiegoś indeksu w O ( log log m ) .
- Biorąc pod uwagę „wskaźnik”, zwróć znak w tej pozycji w .
- Biorąc pod uwagę „wskaźnik”, usuń znak z tej pozycji w .
- Biorąc pod uwagę „wskaźnik”, dodaj znak w tej pozycji w i umieść wskaźnik w następującej pozycji.
- (opcjonalnie) Biorąc pod uwagę „wskaźnik”, zwróć „wskaźnik” do następnego / poprzedniego znaku w .
źródło