대략적인 조회를 지원하는 효율적인 맵 데이터 구조


25

필자는 효율적인 근사 키 조회 (예 : 문자열의 레 벤슈 테인 거리)를 지원하여 입력 키에 가장 근접한 일치를 반환하는 데이터 구조를 찾고 있습니다. 지금까지 내가 찾은 가장 적합한 데이터 구조는 Burkhard-Keller 나무 이지만이 목적을 위해 다른 / 더 나은 데이터 구조가 있는지 궁금합니다.

편집 : 내 특정 사례에 대한 자세한 내용 :

  • 현은 보통 서로 상당히 큰 레 벤슈 테인 차이가 있습니다.
  • 문자열의 최대 길이는 약 20-30 자이며 평균은 10-12에 가깝습니다.
  • 효율적으로 쿼리하려는 주로 정적 데이터 집합을 작성하므로 삽입보다 효율적인 조회에 더 관심이 있습니다.

입력 문자열에 대한 조건과 맵의 항목 수 크기가 있습니까? 지도 삽입이 얼마나 효율적이어야합니까?
edA-qa mort-ora-y

mrm, BK-trees가 여전히 전체 트리의 상당 부분을보고 있다고 말할 수 있습니다. 그러나 그것은 내 측면에서 조기 최적화 일 수 있습니다.
merijn


답변:


18

찾고있는 것은 레 벤슈 테인 / 편집 거리의 "ANNS (근접 이웃 검색)"입니다. 이론적 인 관점에서 볼 때, 편집 거리는 지금까지 이웃에 가까운 검색에서는 비교적 어려운 것으로 판명되었습니다. 여전히 많은 결과가 있습니다 . 이 Ostrovsky 및 Rabani 논문 의 참조를 참조하십시오 . 더 간단하고 더 나은 해결책이있는 대안적인 거리 측정법을 고려하고 싶다면 다음 단락으로 넘어가십시오. 편집 거리의 ANNS의 경우 Indyk 으로 인한 결과가 있습니다. Indyk 은 시간 모든 쿼리에 응답 하고 문자열을보고하는 크기의 데이터 구조를 작성하는 방법을 보여줍니다. 쿼리 문자열에 가장 가까운 문자열보다 최대 3 배 더 큽니다 (크기로 일반화 됨)O(d)nO(dϵ)31/ϵnd11nO(d)O(d)nO(dϵ) 및 근사값 ). 여기서 은 문자열의 수이고 는 문자열 의 최대 길이입니다. 위에서 링크 한 Ostrovsky와 Rabani 논문은 벡터 간의 문자열을 벡터에 매핑하여이 결과를 개선하여 벡터 -distance (유클리드 거리와 유사한 자연적인 기하학적 거리의 종류)가 해당 문자열 사이의 편집 거리와 지도록합니다 "저 왜곡 임베딩"). 이 작업이 완료되면 대한 데이터 구조를 사용할 수 있으며보다 효율적입니다 (다음 단락 참조).31/ϵnd11

다른 거리를 고려하고 싶다면 LSH (locality sensitive hashing)가 큰 도움이됩니다. 지역 민감성 해싱은 ANNS 문제를 해결하기 위해 Indyk와 Motwani가 개척 한 기술로, 고차원 공간에있는 점 (긴 벡터, 긴 문자열 등을 읽음)을 작은 버킷으로 해시합니다. 서로 가까운 거리는 좋은 확률로 동일한 빈에 매핑되고 서로 멀리 떨어진 지점은 다른 확률로 매핑 된 다른 빈에 매핑됩니다. CACM 에는 Indyk와 Andoni의 훌륭한 접근성 설문 조사 기사가 있습니다. 이 기술은 간단하고 빠르며 필요한 공간이 적습니다. 코드도 있습니다 (기사가 코드에 연결되어 있다고 생각합니다). 그것은 해밍 거리와 같은 것들 (그리고 특정 정권에서 잘 작동합니다)1 거리) 및 유클리드 거리, 코사인 거리. 또한 Muthu와 Sahinalp 는 편집 거리, 블록 편집 거리 (일부 편집 작업이 기호 블록에서 작동 할 수 있음) 의 매우 일반적인 일반화를 위해 LSH 체계를 설계 합니다.

이런 종류의 질문은 cstheory.SE에 적합합니다 . 거기에 관련 질문이 있지만, 가까운 이웃에게 정확한 것을 요구하는 것 같습니다.


12

관심있는 데이터 구조는 메트릭 트리입니다. 즉, 메트릭 공간에서 효율적인 검색을 지원합니다. 미터법 공간은 일련의 객체와 삼각형 부등식을 만족하는 객체 사이에 정의 된 거리 함수로 구성됩니다. 그런 다음 개체 집합과 쿼리 요소가 주어지면 쿼리에 충분히 가까운 개체를 검색하는 것이 목표입니다.

검색 문제는 문자 그대로 컴퓨터 과학의 모든 곳에서 발생하기 때문에 막대한 양의 다른 메트릭 트리가 있습니다. 그러나 최소한 피벗 기반 및 클러스터 기반의 두 그룹으로 나눌 수 있으며 하이브리드도 있습니다. 좋은 조사는 E. Chavez et al., Searching in Metric Spaces, 2001 입니다. 예를 들어, 5 장 : 미터법 공간에 대한 현재 솔루션, 283 페이지를 참조하십시오.

거기에서, 표 1에서, Chavez et al. 16 개의 다른 메트릭 트리를 고려하십시오. 공간 복잡성, 구성 복잡성, 청구 된 쿼리 복잡성 및 각각에 대한 추가 CPU 쿼리 시간 (알려진 경우)을 나타냅니다. 구성 복잡성을 너무 신경 쓰지 않으면 BK- 트리의 쿼리 복잡도는 . 여기서 검색 범위와 공간 구조에 따라 입니다. . 또는 요소 수가 많지 않은 경우 AESA (검색 알고리즘 제거 근사치)를 살펴보십시오. 거대한 공간 ( 시간 및 공간)에 대해 빌드하고 저장하는 것은 허용 할 수 없을 정도로 느리지 만, 실험적으로 쿼리 시간 을 갖는 것으로 나타났습니다 .0 < α < 1 O ( N 2 ) O ( 1 )O(nα)0<α<1O(n2)O(1)

Chavez et al. 또한 다른 나무들에 대한 훌륭한 개요를 제공하고, 특히 어떤 나무가 당신의 관심을 끌면 자연스럽게 더 많은 참고 문헌을 제공합니다. 실제로 다른 나무의 성능은 종종 실험적으로 평가됩니다. 이것은 공간의 구조에 많이 의존한다고 생각합니다. 따라서 어떤 트리가 특히 귀하의 경우에 가장 효율적인지 말하기는 어렵습니다. 그럼에도 불구하고 가장 쉬운 방법으로 시작하는 것이 좋습니다. BK- 트리가 구축하기 가장 쉬운 트리라면 먼저 사용해보십시오. 그들이 당신의 요구 사항을 충족시키지 못하면, 더 많은 정보에 근거한 결정을 내리는 데 도움이 될 수있는 공간에 대한 더 많은 사실을 모으는 데 시간 (그리고 아마도 프로그래밍 시간)을 투자하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.