Проблема:
Учитывая большой (~ 100 миллионов) список беззнаковых 32-битных целых чисел, 32-битное целочисленное значение без знака и максимум Расстояние Хэмминга, возвратите все члены списка, которые находятся в пределах указанного значения Хэмминга входного значения.
Действительная структура данных для хранения списка открыта, требования к производительности диктуют решение в памяти, стоимость создания структуры данных вторична, низкая стоимость запроса структуры данных имеет решающее значение.
Пример:
For a maximum Hamming Distance of 1 (values typically will be quite small)
And input:
00001000100000000000000001111101
The values:
01001000100000000000000001111101
00001000100000000010000001111101
should match because there is only 1 position in which the bits are different.
11001000100000000010000001111101
should not match because 3 bit positions are different.
Мои мысли до сих пор:
Для вырожденного случая Хэмминга Расстояние 0, просто используйте отсортированный список и выполните двоичный поиск для определенного входного значения.
Если расстояние Хэмминга будет только когда-либо равным 1, я могу перевернуть каждый бит в исходном входе и повторить выше 32 раз.
Как я могу эффективно (без сканирования всего списка) обнаруживать элементы списка с расстоянием Хэммингa > 1.