2013-03-27 7 views
0

친구 300,000 단어 (한 줄에 1 단어)가 포함 된 텍스트 파일 (2MB)에 사전 순으로 정렬 된 단어 목록이 있습니다. 이미 정렬되었으므로 정확하고 대소 문자를 구분하지 않아도되는 빠른 문자열 검색을 만들고 싶습니다. 어떤 아이디어로 그렇게 할 수 있습니까?안드로이드의 단어 목록 텍스트 파일에서 단어 검색

가능한 한 신속하게 대소 문자를 구분하지 않아야합니다. 예를 들어,

사용자가 텍스트 파일에서 'MAT'라는 단어를 검색해야하는 경우 출력은 mat/MAT 여야하며 친구, 짝짓기 또는 이와 유사한 단어는 포함하지 않아야합니다. 출력은 최소 시간 내에 생성되어야합니다.

편집 - 난 등의 클래스 또는 패턴/정규 또는 BufferedReader로/스캐너처럼 할 수있는 알고리즘과 같은 솔루션을 필요로

+2

어,이 용도로 데이터베이스를 사용하지 않아야합니까? –

+0

단 하나의 열을 가진 전체 데이터베이스를 만드시겠습니까? 오버 헤드는 텍스트 파일을 검색하는 것 이상의 의미 일 수 있습니다. –

+0

오버 헤드는 검색 속도가 빨라지므로 가치가 있습니다. 알파벳 당 태블릿을 사용하고 사용자 입력의 첫 번째 알파벳을 기준으로 해당 표만 검색하면이를 줄일 수도 있습니다. –

답변

0

당신의 가장 좋은 방법은 같은 방법으로, 데이터베이스에 제대로 저장하는 아마 최소한의 데이터를 검색해야합니다.

예를 들어 알파벳 문자 당 표는 해당 문자로 시작하는 단어 만 있습니다. 기본적으로 검색은 이미 300,000/20 (26 - 희소 한 문자에서 약간의 단어 제외) 정도의 검색을 줄였습니다.

아마도 이미 300,000 단어를 처리 할 것입니다. 그렇다고해도 더 이상 사용하지 않고 길이를 구분할 수도 있습니다.

귀하의 모든 단어를 데이터베이스에 저장하는 데 다소 시간이 걸릴 수 있지만 앱에는 문제가되지 않을 수 있습니다.

1

단어 목록이 이미 정렬 된 경우 생각할 수있는 가장 빠른 방법은 binary search입니다. 대소 문자를 구분하는 부분은 ToUpper() 또는 ToLower()를 각 문자열 (입력 파일 하나와 파일에서 비교할 파일)에 적용하고 문제를 해결하십시오.

다른 사람들과 동의하지만 데이터베이스를 사용해야합니다.

관련 문제