2010-05-17 6 views

답변

1

단계 # 1 :

단계 # 2 쿼리 뺀 ORDER BY 부분을 수행하여 Cursor를 감싸는 CursorWrapper을 만든 다음 정렬 위치를 사용하여, 각 위치에 대한 JARO - 윈 클러의 거리를 계산 위치를 정렬 위치를 필요로하는 모든 메서드를 재정의하는 경우 (예 : moveToPosition(), moveToNext()).

+0

나는 Java에서 비슷한 것을하고 있지만, N x M 스텝을 계산하는 동안 많은 시간이 걸리고, 스크립트는 300 x 500에 대해 2-3 분 실행됩니다. – Pentium10

+0

"N x M steps"이 어디에서 유래되었는지 명확하지 않습니다. Java에서 계산하기에는 너무 느리면 NDK를 사용하십시오. – CommonsWare

+0

나는 사람 동기화 데이터베이스에서 일하고 있는데, 1 쪽 끝은 N 레코드이고, 다른 쪽 끝은 M 레코드이고, 나는 최선을 맞추기 위해 이름에 jaro-winkler 거리 알고리즘을 실행한다. – Pentium10

1

미리 문자열 길이를 계산하여 별도의 열에 추가하십시오. 그런 다음 길이에 따라 표를 정렬하십시오. 색인을 추가하십시오 (가능한 경우). 그런 다음 추가 필터를 추가하십시오. 예를 들어 "Srivastava Brahmaputra"와 "John Smith"를 비교하고 싶지는 않습니다. 길이가 너무 길어서 이러한 종류의 길이 비교를 전체 길이의 백분율로 제외하십시오. 따라서 단어가 10자인 경우 10 + -2 또는 10 + 3 자의 단어 만 비교하십시오.

이 방법을 사용하면이 알고리즘을 실행해야하는 횟수를 크게 줄일 수 있습니다.

일반적으로 100,000 개 항목의 보컬 아가리에서 이러한 필터는 약 300 건의 비교 횟수를 줄입니다. 완전히 단절된 레코드 연결을 수행하지 않으면 안드로이드를 사용해야하는 이유가 궁금합니다. 당신은 여전히 ​​확률 론적 방법을 적용하고 점수를 계산할 필요가 있으며 이것은 안드로이드에 대한 직업이 아닙니다 (적어도 현재는 그렇지 않습니다).

또한 MS SQL Server에서 Jaro Winkler 문자열 거리가 CLR 함수로 래핑되어 SQL Server가 기본적으로 arays를 지원하지 않으며 많은 처리가 배열 주위에 있기 때문에 성능이 훨씬 향상되었습니다. 따라서 T-SQL을 구현하면 오버 헤드가 너무 많이 발생하지만 SQL-CLR은 매우 빠르게 작동합니다.

관련 문제