해밍 거리는 levenshtein distance과 밀접한 관련이 있으며 맞춤법 교정에 사용되는 알고리즘과 유사합니다.
작동 방법은 trie에서 branch-and-bound 검색입니다. 거리가 가까울수록 사전 크기가 선형이 될 때까지 지수 함수적인 시간이 걸립니다.
walk(trie, word, i, hit, budget){
if (budget < 0 || i > word.length) return;
if (trie==NULL){
if (i==word.length) print hit;
return;
}
hit[i] = 0;
walk(trie.subtrie[0], word, i+1, hit, (word[i]==0 ? budget : budget-1));
hit[i] = 1;
walk(trie.subtrie[1], word, i+1, hit, (word[i]==1 ? budget : budget-1));
}
main(){
for (int budget = 0; ; budget++){
walk(trie, word, 0, hit, budget);
/* quit if enough hits have been printed */
}
}
아이디어는 당신이 추적하는 전체 트라이을 도보 : 사전 엄격한 해밍 거리 이진 트라이에 저장된 이진 단어 인 경우
, 여기에 간단한 의사 코드 현재 트라이 노드와 원래 단어 사이의 거리. 얼마만큼의 거리를 허용 할 것인지 예산을 세우면 검색이 생략됩니다. 이것은 당신이 트라이 깊숙이 갈수록 거리가 줄어들 수 없기 때문에 가능합니다.
그런 다음 원하는 히트를 인쇄 할 때까지 예산을 0에서 시작하여 단계적으로 늘리면됩니다. 각 보행은 후속 보행보다 훨씬 적은 수의 노드를 다루기 때문에 다중 보행을하는 것이 아 닙니다. k
이 수정 된 경우 간단히 예산으로 시작할 수 있습니다.