로프 용 반 엠데 보아스 나무와 동등한 것이 있습니까?


23

내가 아는 사람은 가까운 장래에 텍스트 편집기를 구현할 계획이므로 텍스트 편집기에 어떤 종류의 데이터 구조가 빠른지 생각해 보았습니다. 가장 많이 사용되는 구조는 분명히 로프 또는 갭 버퍼 입니다.

Van Emde Boas 트리는 넣을 수있는 항목 수와 큰 초기화 비용에 대한 상한을 신경 쓰지 않으면 가장 빠른 우선 순위 대기열입니다. 내 질문은 van Emde Boas 트리만큼 빠르지 만 텍스트 편집기 작업을 지원하는 데이터 구조가 있는지 여부입니다.

데이터 구조에서 문자 만 지원 하면됩니다 (따라서 이면 최대 4GB의 ASCII 문자를 지원). 우리는 허용 시간이 새로운 데이터 구조를 초기화 할 수 있습니다. 다음 작업을 지원하고 싶습니다.로그 m = 32 mlogm=32m

  • 위치 에 문자를 삽입하십시오 (따라서 모든 후속 문자의 위치가 1 씩 증가 함).O ( 로그 로그 m )iO(loglogm)
  • 에서 위치의 문자를 삭제하십시오 .O ( 로그 로그 m )iO(loglogm)
  • 위치에 문자를 리턴 에서 .O ( 로그 로그 m )iO(loglogm)

따라서 insert (0, 'a') 뒤에 insert (0, 'b')가 "ba"가됩니다.

더 좋을 것입니다 :

  • 일부 인덱스 에 '포인터'를 반환합니다 .O ( 로그 로그 m )iO(loglogm)
  • '포인터'가 주어지면 의이 위치에있는 문자를 반환하십시오 .O(1)
  • '포인터'가 주어지면 에서이 위치의 문자를 제거하십시오 .O(1)
  • '포인터'가 주어지면 에서이 위치에 문자를 추가 하고 다음 위치로 포인터를 리턴하십시오.O(1)
  • (선택 사항) '포인터'가 주어지면 의 다음 / 이전 문자로 '포인터'를 반환하십시오 .O(1)

답변:


14

에 Fredman 및 삭스 쇼 "동적 데이터 구조의 셀 프로브의 복잡성" 당신이 더 이상 할 수 없어 당신이 작업 시간을 상각 찾고 있습니다. 그들은이 문제를 "목록 표현"이라고 부릅니다.Θ(lgmlglgm)

Dietz 는 이러한 한계를 달성하는 "목록 색인 및 하위 집합 순위에 대한 최적 알고리즘" 의 데이터 구조를 제시했습니다 .


첫 번째 기사에 대한 링크를 제공 할 수 있습니까?
Raphael

내가 아는 무료 버전이 없습니다.
jbapple
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.