2009-12-22 3 views
0

자동 완성 상자에 사용할 용어가 매우 많습니다. 나는 그 (것)들을 아래로 치울 방법을위한 약간 다른 대본을 검토하고있다, 그러나 나는 중대한 아무것도 아직 오지 않았다.자동 완성 단어 정리 (plune down autocomplete terms)

은 기본적으로 구조는 레코드 레이블과 매우 유사 -

  • 아티스트 앨범 노래
  • 개별 곡이 앨범은 대부분 자신의 기본 노래 인기의 합계이며, 인기가있을 수있다 앨범이
  • 앨범의 곡 수가 매우 다양합니다. 앨범에 수백 곡의 노래가있는 경우 누군가 검색하고 싶을 가능성이 매우 높습니다. 노래가 적은 경우
  • 자동 완성 LETE는, 내가 이런 걸 생각하고

표시하기 어려운 용어를 싶습니다 더 구체적인 (이상의 문자를)된다 :이 앨범의 목록 인 경우

Apple 10 
Banana 10 
Crab 20 
Diner 30 
Dish 20 
Daily 10 
Diver 20 
Dice 10 

을하고, "점수"나는 그들을 할당, 난 단순히 목록 (예를 들어 3)을 누른 다음 점수에 따라 목록을 선택하십시오 - 나는 "D"를 위의 "식사", "접시"및 "Diver"가 나타나면 "i"가되고 "Diner", "Dish"및 "Diver"가됩니다.

이 작업을 수행하는 특정 알고리즘이 있습니까? 또는 AJAX 자동 완성 기능이 내장되어 있습니까? 나는 현재 Prototype/Scriptaculous를 사용하고 있지만 올바르게 만들 수없는 것 같습니다.

답변

1

데이터 구조를 사전 식으로 또는 인기별로 두 가지 방법으로 인덱싱하려고하므로이 알고리즘은 구현하기가 쉽지 않습니다.

노래를 compressed trie으로 만드는 방법 중 하나는 각 노드에 해당 접두어로 시작하는 N 개의 가장 유명한 노래 목록을 미리 저장하는 것입니다. 이것은 많은 저장 공간을 필요로하지만 (O (NUM_SONGS * N)) 빠른 조회가 가능합니다 (O (PREFIX)).

+0

이것은 멋지며 내가 기대할 수있는 최선일 것입니다. 이것의 구현은? – aronchick

4

Google 코드에 server-side autocomplete implementation을 방금 게시했습니다. 이 프로젝트에는 기존 애플리케이션과 독립형 HTTP AJAX 자동 완성 서버에 통합 할 수있는 Java 라이브러리가 포함되어 있습니다. 타이어 차기!

+0

이것은 정말 멋지다 - 내 문제를 많이 해결한다. Ruby 버전을 사용할 수있는 기회가 있습니까? – aronchick

+0

jar 파일을 다운로드하여 독립 실행 형 서버로 실행하고이를 루비에서 연결할 수 있어야합니다. 간단한 루비 클라이언트를 작성하기위한 출발점으로 홈페이지의 파이썬 예제 코드를 참조하십시오. 전체 공개를 위해 서버 래퍼 코드를 광범위하게 테스트하지 않았습니다. –