Расстояние Хэмминга является метрикой, поэтому оно удовлетворяет неравенству треугольника.Для каждой цепочки битов в вашей базе данных вы можете сохранить расстояние Хемминга до некоторой заранее определенной постоянной цепочки битов.Затем вы можете использовать неравенство треугольника для фильтрации цепочек битов в базе данных.
Итак, скажем
C <- some constant bitstring
S <- bitstring you're trying to find the best match for
B <- a bitstring in the database
distS <- hamming_dist(S,C)
distB <- hamming_dist(B,C)
Таким образом, для каждого B
вы должны хранить его соответствующий distB
.
Нижняя граница для hamming(B,S)
будет тогда abs(distB-distS)
.И верхняя граница будет distB+distS
.
Вы можете сбросить все B
так, чтобы нижняя граница была выше, чем нижняя верхняя граница.
Я не уверен на 100%, какк оптимальному способу выбрать какой C
Я думаю, вы хотели бы, чтобы это была цепочка битов, близкая к «центру» вашего метрического пространства цепочек битов.