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