필자는 이론적으로 수천 개의 문자열을 임의의 (사전 프로젝트 별) 데이터 정렬로 정렬해야하는 사전 편집 소프트웨어를 작성하고 있습니다. 사용자 지정 데이터 정렬을 지정하는 두 가지 방법이 있습니다.효율적인 정렬 및 정렬 방법?
- 유니 코드 형식의 다단계 정렬 키에 대한 graphemes의지도입니다.
- 정렬 순서대로 알파벳 글자체의 배열 (가능하게는 이중선 등)이 내부적으로 조합 키의지도로 변환 될 수 있습니다.
문자열을 비교하는 순진한 방법을 사용하면 불일치를 찾을 때까지별로 그래 핀 그래 핀-확인하고 일치하지 않는 제자 비교하기위한 정렬 키를 검색하는 것입니다,하지만 난 더 효율적인 방법이 바라고 있어요 그것을하는 것.
내가 지금까지 가지고있는 가장 좋은 아이디어는 동일한 길이의 문자열을 리틀 엔디안 base-n 숫자로 처리 할 수 있다는 점에 달려있다. 따라서 저렴한 가격으로 데이터 정렬을 변환하는 각 문자열의 정수 키를 미리 계산할 수있다. 정수 비교. 그러나 이것은 다른 길이의 문자열 (사전을 정렬 할 때 큰 문제)에서 발생하며, 생성 될 수있는 정수의 크기에는 제한이 없습니다. 길이 차이를 설명하기 위해 각 문자열의 모든 접두사에 대한 키 목록을 계산 한 다음 비교되는 더 짧은 문자열과 동일한 길이의 접두사에 대한 키를 비교할 수 있다고 생각했습니다. 그것은 꽤 잘하는 것처럼 보이지만 키 크기는 여전히 제한되어 있지 않으며 키를 저장하면 많은 메모리를 사용할 수 있습니다.
이러한 접근 방식을 향상시킬 방법이 있습니까? 아니면 완전히 잘못된 것일뿐입니다. 임의의 데이터 정렬을 사용하여 문자열을 정렬하는 훨씬 더 좋은 방법이 있습니까?
strcoll은 strxfrm과 비교할 문자열을 변환 한 후 strcmp를 사용합니다. GNU libc 문서에서는 모든 문자열의 strxfrm 변환을 미리 계산 한 다음 strcmp를 사용하여 효율적으로 정렬 할 것을 권장합니다. Strxfrm 구현을 찾을 수 있다면 strxfrm이 단지 변환 된 문자열보다 더 나은 비교 키를 생성하는 방법이 있는지 보는 방법을 살펴 봐야한다고 생각합니다. –