게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
가장 빠른 자료구조에 대한 지식 공유를 해주실 수 있는지...
게시물ID : programmer_5404짧은주소 복사하기
작성자 : 은빛나루
추천 : 0
조회수 : 1268회
댓글수 : 10개
등록시간 : 2014/09/13 07:49:48
제가 현재 찾으려고 하는 것은 문자열에 대한 처리를 할 때 가장 고성능을 낼 수 있는 자료 구조 입니다.
사용하고 있는 언어가 C++인지라 C++에 있는 자료 구조로 말씀 드리죠..

성능이 높아야 하는 연산은
1. random insertion: 임의의 위치에 한 문자(길이 1) 혹은 문자열(길이 2이상)을 입력
2. 빠른 sequential read: 맨 첫 문자부터 특정 위치까지의 발생하는 문자의 개수를 세야 함
3. 삭제나 수정 연산은 발생하지 않습니다.

기본적으로 vector<char>나 string을 통해서 삽입, 읽기를 수행해 보면 임의의 위치에 삽입 하는 것은 매우 느립니다.
가령 다음과 같은 코드가 있다고 하죠.

vector<char> vec;
.... 4 Gigabyte의 push_back() 연산 수행
vec.insert(vec.begin() + 1, 'A');

map<char, uint64_t> occ;
for(auto c : vec) {
   ++occ[c];
}

삽입 연산에 대한 대안물로 rope라는 자료 구조를 찾아서 적용해 봤더니 좀 더 빨라 지더군요..

다행인 것은 입력되는 문자열에서 나타날 수 있는 문자의 갯수가 한정되어 있습니다(01234567) <- 이것만 나타납니다.
예를 들어서, 11111222222222000000033334343444444444444444222233312343213435677777777766666666
이런 식입니다.

run length 인코딩을 수행하면 좀 더 읽고 쓰기 하는데 들어가는 비용을 줄일 수 있을 것 같습니다.

정리하면, 이런 문자열은 임의의 위치에서 다시 새로운 문자를 삽입 해야 하고, 특정 위치까지 문자 별 발생 횟수를 세어야 합니다. 이런 연산의 성능이 높은 자료 구조가 있다면 정보 공유좀 부탁 드립니다.
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호