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

21 Авг 2019 в 06:09
151 +1
0
Ответы
1

Для выявления дубликатов в массиве 64-битных чисел по (битовому) расстоянию Хэмминга необходимо выполнить следующий SQL запрос:

SELECT a.phash, b.phash
FROM images a
JOIN images b ON a.phash != b.phash
WHERE BIT_COUNT(CONV(a.phash, 16, 10) ^ CONV(b.phash, 16, 10)) <= C;

Здесь C - это порог расстояния Хэмминга, который нужно задать. Количество бит, на которых числа отличаются, вычисляется с помощью оператора XOR (^), а затем функция BIT_COUNT подсчитывает количество установленных бит. Результатом запроса будут пары чисел, между которыми расстояние Хэмминга не превышает порога C.

20 Апр 2024 в 13:23
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир