Имеется база данных с N строками фиксированной длины. Существует строка запроса той же длины. Проблема состоит в том, чтобы извлечь первые k строк из базы данных, которые имеют наименьшее расстояние Хэмминга до q.
N мало (около 400), строки длинны, фиксированы по длине. База данных не изменяется, поэтому мы можем предварительно вычислить индексы. Запросы сильно различаются, кеширование и/или предварительное вычисление - это не вариант. Их много в секунду. Нам всегда нужны k результатов, даже если результаты k-1 имеют совпадение 0 (сортировка на расстоянии Хэмминга и первое значение k, поэтому нечувствительные к местоположению хэширование и подобные подходы не будут выполняться). kd-дерево и подобное разбиение пространства, вероятно, будут работать хуже, чем линейный поиск (строки могут быть очень длинными). BK-дерево в настоящее время является лучшим выбором, но оно все еще медленное и сложное, чем должно быть.
Похоже, что существует алгоритм, который будет строить индекс, который будет отбрасывать большинство записей за очень немногие шаги, оставив k <= t < N записей для вычисления реального расстояния Хэмминга.
Люди, предлагающие нечеткое соответствие строк, основанное на расстоянии Левенштейна, - спасибо, но проблема намного проще. Обобщенные методы, основанные на метрических расстояниях (например, BK-деревья), хороши, но, возможно, есть что-то, использующее описанные выше факты (небольшие строки с фиксированными размерами DB/long, простое расстояние Хэмминга)
Ссылки, ключевые слова, документы, идеи? =)