2011-11-02 4 views
4

배경 :
내 CSS360 그룹이 자동 완성 검색 기능을 포함하는 Android 애플리케이션을 만들려고합니다. 검색 할 데이터는 약 7000 개의 항목으로 구성되며 전화 자체의 SQLite 데이터베이스에 저장됩니다. 가장 확실한 접근 방법은 사용자가 입력하는 모든 문자 다음에 데이터베이스를 선형 검색 한 다음 사용자 쿼리의 알파벳 확장이 가능한 제안 목록을 반환하는 것입니다. 그러나 이것은 꽤 비효율적 인 것처럼 보이며 더 나은 대안을 찾고 있습니다. 오늘 수업 중 또 다른 수업에서 강사는 trie 데이터 구조에 대해 간략히 논의했으며 전체 사전을 저장하는 데 자주 사용되는 것으로 언급했습니다. 트라이에 대한 엔트리는 대수적 인 시간에 검색 할 수 있습니다 (일반 오래된 배열의 경우 선형 시간과 반대). 따라서이 도구는 우리가 사용하는 훌륭한 도구처럼 보입니다! 불행히도, 우리는 이미이 프로젝트에 대한 우리의 머리를 숙청하고 있습니다. 우리 중 누구도 이런 일이 일어날 수있는 방법을 찾지 못했습니다. 우리 모두는 프로그래밍 기초 지식을 가르치기위한 기본적인 콘솔 어플리케이션을 지금까지 코딩 해왔다. 우리는 모두 YouTube 동영상을보고 안드로이드 플랫폼을 배우려고 1 주일 만에, 그리고 SQL 경험이있는 우리 그룹의 한 남자와 데이터베이스 내용을 달리하고 있습니다. 우리는 진지하게 몇 가지 지침을 사용할 수 있습니다!미리 채워진 Trie

질문 :

  • 트라이을 만들 때이 가능 전체 구조는 미리 입력 한합니까? IE : 사용되는 모든 노드에 대해 코드 줄을 생성하므로 프로그램 시작시 전체 구조가 이미 메모리에 저장됩니다. 내 생각에 이것은 프로그램이 시작될 때마다 데이터베이스에서 전체 trie를 재생성해야하는 오버 헤드를 줄일 수 있다는 것입니다. 그렇다면이 수천 줄의 코드를 우리 프로그램에 넣는 쉬운 방법이 있습니까? IE : 데이터베이스 파일을 복사하여 Eclipse에 붙여 넣을 수있는 자바 명령의 거대한 텍스트 파일로 변환하는 스크립트의 일종입니까?
  • 일종의 내부 목록이나 데이터 구조 대신 데이터베이스를 직접 검색하면 상당한 오버 헤드가 발생합니까? 데이터베이스에서 이름을 복사하고 자동 완성 기능을 프로그램에서 검색해야합니까?
  • 이것이 기술적으로 너무 어렵다는 것을 입증하고 정규 선형 검색을 사용해야 할 경우 성능에 현저한 영향을 줍니까?
  • 현재 우리는 사용자가 문자를 입력 할 때마다 자동 완성 기능을 실행 한 다음 입력을 계속하기 전에 기능이 복귀 할 때까지 기다리는 것이 좋습니다. 지금까지 작성한 유일한 프로그램은 이와 같이 동 기적으로 작동합니다. 이 함수를 비동기 적으로 만들려면 무엇을 알아야합니까? 초보자의 능력과 우리가 이미 충족시켜야 할 요구 사항을 고려할 때 이것은 기술적으로 너무 도전적일까요?

답변

0

sqlite는이 자동 완성 기능을 적절하게 제공 할 수 있어야합니다. 바퀴를 다시 구현하는 것보다 내부 색인을 사용하는 것이 좋습니다. 후자를 할 필요가 있다면, sqlite는 아마 당신이 그 일을 한 후에 당신을 도울 것입니다.

하위 문자열을 검색하려면 full text search이 가장 좋습니다.

단어의 시작 부분 만 완성하려면 바닐라 indexes 만 사용하면 충분합니다. 성능이 문제라면 쿼리를하기 전에 3자를 입력 할 때까지 기다리십시오. 응답이 좋지 않으면 결과에 제한을 설정하십시오.

관련 문제