내가 아는 사람은 가까운 장래에 텍스트 편집기를 구현할 계획이므로 텍스트 편집기에 어떤 종류의 데이터 구조가 빠른지 생각해 보았습니다. 가장 많이 사용되는 구조는 분명히 로프 또는 갭 버퍼 입니다.
Van Emde Boas 트리는 넣을 수있는 항목 수와 큰 초기화 비용에 대한 상한을 신경 쓰지 않으면 가장 빠른 우선 순위 대기열입니다. 내 질문은 van Emde Boas 트리만큼 빠르지 만 텍스트 편집기 작업을 지원하는 데이터 구조가 있는지 여부입니다.
데이터 구조에서 문자 만 지원 하면됩니다 (따라서 이면 최대 4GB의 ASCII 문자를 지원). 우리는 허용 시간이 새로운 데이터 구조를 초기화 할 수 있습니다. 다음 작업을 지원하고 싶습니다.로그 m = 32 √
- 위치 에 문자를 삽입하십시오 (따라서 모든 후속 문자의 위치가 1 씩 증가 함).O ( 로그 로그 m )
- 에서 위치의 문자를 삭제하십시오 .O ( 로그 로그 m )
- 위치에 문자를 리턴 에서 .O ( 로그 로그 m )
따라서 insert (0, 'a') 뒤에 insert (0, 'b')가 "ba"가됩니다.
더 좋을 것입니다 :
- 일부 인덱스 에 '포인터'를 반환합니다 .O ( 로그 로그 m )
- '포인터'가 주어지면 의이 위치에있는 문자를 반환하십시오 .
- '포인터'가 주어지면 에서이 위치의 문자를 제거하십시오 .
- '포인터'가 주어지면 에서이 위치에 문자를 추가 하고 다음 위치로 포인터를 리턴하십시오.
- (선택 사항) '포인터'가 주어지면 의 다음 / 이전 문자로 '포인터'를 반환하십시오 .