BK 트리
BK-tree이 글은 대부분의 독자들이 이해하기에는 너무 기술적인 것일 수도 있다.할 수 하십시오.(2019년 3월)(이 및 학습 |
BK 트리는 월터 오스틴 버크하드와 로버트 M. 켈러에[1] 의해 제안된 미터법 트리다.단순성을 위해 정수 이산형 메트릭 , y) 을(를) 고려하십시오 그러면 BK-tree는 다음과 같은 방법으로 정의된다.임의 요소 a가 루트 노드로 선택된다.루트 노드는 0개 이상의 하위 트리를 가질 수 있다.k-th 하위 트리는 ( , b)= 과 같은 모든 요소 b로 재귀적으로 구축된다 BK-tree는 사전에서 대략적인 문자열 일치를 위해 사용될 수 있다.[2][example needed]
예
이 그림은 레벤스테인 거리를 이용하여 얻은 단어 {"책", "책", "케이크", "부", "분", "쿡", "케이크", "케이프", "케이프", "카트"의 W 셋트의 BK 트리를 묘사하고 있다.
- 각 노드 은(는) ;
- 각 호, v) 은(는) d = d ,) 로 레이블이 지정되며, 서 w는 에 할당된 단어를 나타낸다
BK 트리는 다음과 같이 제작된다.
- BK 트리의 모든 노드 에 대해 송신 호에 할당된 중량은 구별된다.
- 모든 호 = ( , ) 에 대해 의 각 하위 v v은, u) {\') k}:
- 예 1: "책"에서 "책"까지의 호를 고려한다.{"book", "boo", "boon", "cook"}의 "book"과 "cook" 사이의 거리는 1과 같다.
- 예 2: "책"에서 "부"까지의 호를 고려한다.{"boo", "bun", "쿡"}의 "책"과 임의의 단어 사이의 거리는 2와 같다.
삽입
삽입 원시 값은 개별 메트릭 에 따라 BK 트리 을(를) 채우는 데 사용된다
입력:
- : BK-트리;
- v 는 호, v)
- 은(는) 노드 에 할당된 단어를 의미한다.
- : t 에서 사용하는 이산형 메트릭(예: Levenshtein 거리);
- : 에 삽입할 요소
출력:
- 에 해당하는 의 노드
알고리즘:
- 이(가) 비어 있는 경우:
- 에 루트 노드 생성
- 반품
- 을(를) t 의 루트로 설정하십시오.
- 이(가) 있는 동안:
- = 인 경우
- 반품
- v= 과(와) 같은 의 자식 을(를) 찾으십시오.
- 을(를) 찾을 수 없는 경우:
- v 생성
- 호, ) 생성
- 반품
찾다
검색 요소 w을를) 지정하면 조회 원시 요소는 BK-트리를 통과하여 w 의 가장 가까운 요소를 찾는다핵심 아이디어는 BK 트리 조직과 삼각불평등(컷오프 기준)을 활용해 지금까지 발견된 최고의 후보만을 개선할 수 있는 노드들로 스타일 탐사를 제한하자는 것이다.
입력:
- : BK-트리;
- : 해당 이산 측정지표(예: 레벤슈테인 거리);
- : 검색된 요소;
- : 의 일치와 w 사이에 허용되는 최대 거리는 + 로 기본 설정됨
출력:
- b s : 에 저장되고 또는or 에 따라 저장된 에 가장 가까운 요소;
알고리즘:
- 이(가) 비어 있는 경우:
- 반품
- 할 노드 집합의 을(를) 생성하고 의 루트를 S 에 삽입하십시오
- 동안
- 에서 임의 노드 을(를) 팝업
- d < :
- 각 송신u , )에 대해
- v- d < : (차단 기준)
- 을(를) 에 삽입하십시오
- v- d < : (차단 기준)
- 반품
조회 알고리즘 예제
위에 표시된 8-노드 B-K 트리의 예를 들어 = w"cool"을 설정하십시오.트리의 루트를 포함하도록 이(가) 초기화되며, 이후 ="book"과 함께 의 첫 번째 값으로 펑크가 발생한다.추가 = ""에서 ""까지의 거리가 2이므로 2 {\displaystyle 이고, d = 2 이(가) 지금까지 발견된 가장 좋은(즉, 가장 작은) 거리인 것이다.다음으로 루트로부터 나가는 각 호를 차례대로 고려한다: "책"에서 "책"까지의 호는 무게가 이며, - = 1 이(가) b t= 보다 작기 때문에 "책"을 포함하는 를 S S}에 삽입하여 추가 처리를 한다.The next arc, from "book" to "cake," has weight 4, and since is not less than , the node containing "cake" is not inserted into . Therefore the subtree rooted at "cake" will be pruned from the search, as the word closest to "cool"은 해당 하위 트리에 나타날 수 없다.이 가지치기 작업이 올바른 이유를 보려면, "케이크" 하위 트리에 나타나는 후보 단어 이(가) 2 - "쿨"을 나타내는 삼각형 불평등을 위반한다는 것을 주목하십시오. 삼각형 불평등은 이 세 개의 숫자 집합에 대해 (삼각형의 측면으로), 두 개의 숫자를 세 번째 숫자 이하로 합칠 수 없지만, 여기서는 디스플레잉을 참조하십시오."cool"에서 "book"(이 2인)까지의 탠스와 "cool"에서 ""까지의 거리이 2인 미만는 "book"에서 "cake"(이 4인)까지의 거리에 도달하거나 초과할 수 없다.그러므로 "케이크"에 뿌리를 둔 하위 트리 전체를 무시해도 무방하다.
다음으로 "책"을 포함하는 노드가 에서 펑크 났으며, 이제 = "쿨"에서 "책"까지의 거리. > e {\는 2로 설정된 상태로 유지되며, "책"을 포함하는 노드의 단일 송신 호를 고려한다.다음으로, "boo"를 포함하는 노드는 "cool"에서 "boo"까지의 인S 및 = 에서 펑크가 난다.이것은 또 다시 dbes 있어=2{\displaystyle d_{최고의}=2에}."야유"에서 각각의 외향적이고 아크 지금으로 간주되면이고,"야유""요긴한 것"에 이르는 아크 무게 1 가지고 있으며, 이후 2− 1=1<>개선되지 않는다;dbes 있어=2{\displaystyle 2=1<, d_{최고의}=2},"요긴한 것"포함에 S{S\displaystyle}. 마찬가지로부터. 2−= < "쿡"도 S 에 추가된다
마지막으로 의 마지막 두 요소를 임의의 순서로 고려한다. "쿡"을 포함하는 노드를 먼저 펑크하여 t{\를 거리 1로 개선한 다음, "분"을 포함하는 노드가 마지막으로 펑크(boon)을 터뜨려 "쿨"과 거리가 2이므로 최상의 r이 개선되지 않는다고 가정한다.esult. 마지막으로, "쿡"은 t w_{과(와 b e s = 1 {\d_}로 반환된다
참고 항목
- Levenshtein 거리 – BK-tree를 만들 때 일반적으로 사용되는 거리 측정 기준
- Damerau-Levenshtein 거리 – 전이가 가능한 레벤쉬테인 거리의 변형된 형태
참조
- ^ W. Burkhard와 R. Keller.CACM, 1973년 최고의 파일 검색 방법
- ^ R. Baeza-Yates, W. Cunto, U. Manber, S.우. 고정 쿼리 트리를 사용한 근접 일치.M. Crochmore와 D.에서.거스필드, 편집자, 제5회 콤비네이터 패턴 매칭, LNCS 807페이지, 198–212페이지, 아실로마르, CA, 1994년 6월.
- ^ 리카르도 배자 예이츠와 곤살로 나바로.사전의 빠른 대략적인 문자열 일치.프로크. SPIRE'98
외부 링크
- 테스트 결과 및 성능 그래프를 포함한 Common Lisp의 BK 트리 구현.
- BK-Tree 및 미터법 공간과의 관계에 대한 설명 [3]
- C# [4]에서 구현된 BK-Tree에 대한 설명
- Lua에서 BK-트리 구현 [5]
- Python의 BK 트리 구현 [6]