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

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

Хранится в таблице images, колонка phash: char(16).
Каким SQL запросом можно выявить дубликаты?
  • Вопрос задан
  • 474 просмотра
Пригласить эксперта
Ответы на вопрос 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, то как должны сформироваться группы?
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы