Эффективная структура картографических данных, поддерживающая приблизительный поиск


25

Я ищу структуру данных, которая поддерживает эффективный приблизительный поиск ключей (например, расстояние Левенштейна для строк), возвращая максимально возможное совпадение для клавиши ввода. Наилучшей структурой данных, которую я нашел до сих пор, являются деревья Буркхарда-Келлера , но мне было интересно, существуют ли другие / лучшие структуры данных для этой цели.

Изменить: некоторые подробности моего конкретного случая:

  • Струны обычно имеют довольно большое отличие Левенштейна друг от друга.
  • Струны имеют максимальную длину около 20-30 символов, в среднем ближе к 10-12.
  • Меня больше интересует эффективный поиск, чем вставка, поскольку я буду создавать набор в основном статических данных, которые я хочу эффективно запрашивать.

Есть ли какие-либо условия для входной строки и размер количества элементов на карте? Насколько эффективной должна быть вставка на карту?
edA-qa mort-ora-y

мрм, насколько я могу судить, BK-деревья все еще смотрят на довольно большую часть всего дерева. Но это может быть преждевременная оптимизация на моей стороне, я думаю?
Мейрин


Ответы:


18

То, что вы ищете, это «приблизительный поиск ближнего» (ANNS) на расстоянии Левенштейна / редактирования. С теоретической точки зрения, расстояние редактирования до сих пор оказалось относительно трудным для поиска ближайших соседей. Тем не менее, есть много результатов, см. Ссылки в этой статье Островского и Рабани . Если вы хотите рассмотреть альтернативные метрики расстояния, для которых есть более простые и лучшие решения, переходите к следующему абзацу. Для ANNS на расстоянии редактирования есть результат благодаря Indyk , который показывает, как построить структуру данных размером которая отвечает на любой запрос за время и сообщает строку который не более чем в три раза дальше строки, ближайшей к строке запроса (это обобщает размерnO(d)O(d)nO(dϵ) и приближение ). Здесь - количество строк, а - максимальная длина любой строки. Связанные выше работы Островского и Рабани, которые я связал, улучшают этот результат путем сопоставления строк с векторами, так что расстояние (вид естественного геометрического расстояния, аналогичного евклидову расстоянию) между векторами приближается к редактируемому расстоянию между соответствующими строками (это называется «вложение с низким искажением»). Как только это будет сделано, можно использовать структуру данных ANNS для , и они окажутся более эффективными (см. Следующий параграф).31/ϵnd11

Если вы готовы учитывать другие расстояния, то хеширование, чувствительное к местному населению (LSH), делает большую работу. Хеширование с учетом локальных особенностей - это метод, впервые предложенный Indyk и Motwani для решения проблемы ANNS, когда точки, которые живут в многомерном пространстве (считывают длинные векторы, длинные строки и т. Д.), Хэшируются в небольшое количество сегментов, так что расположенные рядом друг с другом отображаются с одинаковой вероятностью в одну и ту же ячейку, а точки, расположенные далеко друг от друга, сопоставляются с разными ячейками, также с большой вероятностью. В CACM есть отличная и очень доступная обзорная статья Indyk и Andoni . Эта техника проста и быстра, и требует небольшого места; там тоже есть код (я думаю, что статья ссылается на код). Это хорошо работает для таких вещей, как расстояние Хэмминга (и в определенных режимах1 расстояние) и евклидово расстояние, косинусное расстояние. Кроме того, Muthu и Sahinalp проектируют схемы LSH для очень естественного обобщения расстояния редактирования, расстояния редактирования блока (где некоторые операции редактирования могут работать с блоком символов).

Этот вопрос подходит для cstheory.SE . Там есть связанный вопрос , но он, кажется, спрашивает о точном соседе.


12

Интересующие вас структуры данных являются деревьями метрик. То есть они поддерживают эффективный поиск в метрических пространствах. Метрическое пространство образовано набором объектов и определенной между ними функцией расстояния, удовлетворяющей неравенству треугольника. Затем, при наличии набора объектов и элемента запроса, цель состоит в том, чтобы извлечь эти объекты достаточно близко к запросу.

Поскольку проблемы поиска буквально повсюду в компьютерных науках, существует огромное количество различных метрических деревьев. Тем не менее, их можно разделить по крайней мере на две группы: на основе сводной и кластерной (и, конечно же, есть гибриды). Хороший обзор - Э. Чавес и др., Поиск в метрических пространствах, 2001 . См., Например, главу 5 «Современные решения метрических пространств», стр. 283.

Там, в таблице 1, Чавес и соавт. рассмотрим 16 разных метрических деревьев. Они представляют сложность пространства, сложность конструкции, заявленную сложность запроса и дополнительное время запроса ЦП для каждого (если известно). Если вас не слишком волнует сложность построения, сложность запроса для BK-дерева равна , где зависимости от диапазона поиска и структуры пространства. , Или, если у вас нет большого количества элементов, взгляните на AESA (аппроксимирующее устранение алгоритма поиска). Он неприемлемо медленен для создания и хранения огромных пространств ( времени и пространства), но экспериментально было показано, что время запроса.O(nα)0<α<1O ( 1 )O(n2)O(1)

Чавес и соавт. также дайте хороший обзор других деревьев и, естественно, больше ссылок, если какой-либо из них вызывает у вас интерес. На практике производительность разных деревьев часто оценивается экспериментально. Это, я думаю, во многом зависит от структуры пространства. Поэтому трудно сказать, какое именно дерево будет наиболее эффективным в вашем случае. Тем не менее, я думаю, что это хорошая идея, чтобы сначала пойти с самым простым. Если BK-деревья проще всего построить, сначала попробуйте их. Если они не удовлетворяют вашим требованиям, потратьте время (и, возможно, время программирования) на сбор большего количества фактов о вашем пространстве, которые могут помочь вам принимать более обоснованные решения.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.