Как найти дубликаты в массиве 64-битных чисел по (битовому) расстоянию Хэмминга?

Из базы изображений получил набор perceptive hash - 64-битных чисел, представленных в 16-ричной форме.
Необходимо выявить те группы таких чисел, (битовое) расстояние Хэмминга между которыми не превышает некоторого порога C.

Хранится в таблице images, колонка phash: char(16).
Каким SQL запросом можно выявить дубликаты?
  • Вопрос задан
  • 479 просмотров
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Расстояние Хэмминга на MySQL посчитать несложно.
BIT_COUNT(HEX(:value1) ^ HEX(:value2))
Но надо определиться с понятием "группы таких чисел". Возьмём три двоичных числа (001, 011, 111) и определим расстояния между ними.
d(001, 011) = 1
d(001, 111) = 2
d(011, 111) = 1
Таким образом, первое и третье числа находятся на расстоянии 1 до второго, но между собой они находятся на расстоянии 2. Если границей расстояния выбрать 1, то как должны сформироваться группы?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы