문제

ex : 문자열 "ASDF"와 문자열 세트 ( "QWER", "ASWR", "ASDV")가있는 경우. 세트와 문자열 사이의 해밍 거리는 "ASDV"와 "ASDF"가 캠핑 거리를 가지고 있습니다.

와 같은 무언가로 쉽게 무너질 수 있습니다.
def hamming_distance(string, set):
    min = len(string)
    for element in set:
        element_distance = sum(ch1 != ch2 for ch1, ch2 in zip(string, element))
        if min > element_distance:
            min = element_distance
        if min == 0:
            break
    return min
.

나는 이것이 o (n * k)가 있다고 생각합니다. 여기서 n= len (string) 및 k= len (set). 그러나 N ^ 2를 사용하여 최대 세트 크기의 비늘이 있으므로 기본적으로 O (n ^ 3)를 다루는 것을 의미합니다. 오히려 정적으로 설정되므로 전처리가 확실히 옵션이되는 데 도움이 될 것입니다.

마지막으로, 여기에있는 응용 프로그램이 문제의 문자열에 가장 가깝게 결정하는 것입니다. 그러나 문자열 길이가 세트 수보다 훨씬 더 제한 요소이기 때문에 문제를 줄이는 것입니다. ...에 개별 하위 집합 대신 공간을 보면이 모든 것을 보면서 이것을 접근하는 또 다른 방법이 있습니다. 나는 모든 귀가 될 것입니다. 내가 처음으로 그 접근 방식을 취했을 때, 공간의 복잡성이 완전히 우스꽝 스러울 것으로 보이는 것처럼 보였습니다.

도움이 되었습니까?

해결책

우선, 문자열 사이의 해밍 거리는 메트릭입니다. 따라서 미터법 공간에서 K-neach-inchores를 찾으려고 노력하고 있습니다 (k= 1).

결과적으로, ( "nofollow"> 참조)과 유사한 트리를 고려해야 할 수 있습니다. http://en.wikipedia.org/wiki/m-tree http. : //www.vldb.org/conf/1997/p426.pdf ). 이 나무는 "가장 가까운 이웃"을 찾기 위해 수행 해야하는 숫자 거리 비교를 줄이기 위해 설계되었습니다.

개인적으로, 나는 M-tree 온라인 구현을 찾을 수 없었습니다 (성숙한 M-tree 구현을 찾는 내 닫힌 된 스레드를보십시오). 그래서 나는 내 자신을 굴렸다.

내 구현은 다음과 같습니다 : https://github.com/jon1van/mtreemaprepo

내가 찾을 수있는 유일한 다른 구현은 이것이 https://github.com/erdavila/m -tree 제거 기능이 없었기 때문에이 구현을 싫어 했었습니다 (그리고 여러 가지 다른 문제). 그러나 그것은 좋았습니다 ... 괜찮습니다.

Levensthtein 거리 메트릭 ( http://en.wikipedia.org/wiki/levenshtein_distance ). 완전히 구현 된 Levenshtein 거리 메트릭을 온라인으로 찾는 것은 꽤 쉬워야합니다

levenstein 거리 기능 ** http://code.google.com/p/google-refine/source/browse/trunk/src/main/java/edu/mit/simile/vicino/distances/simile/vicino/distances/simile/vicino/distances/levasteindistance.java?r.= 181

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top