Растровые индексы. Google для бумаги, если вы хотите полный фон, это не просто, но стоит прочитать. По сути, создайте битовые значения для ваших логических значений, например:
010110101010
110100010100
000101001100
А затем просто XOR ваш фильтр через них, сортировка по количеству совпадений, возврат. Поскольку все операции выполняются безумно быстро (около одного цикла на элемент, а структура данных использует (редактирует) 100 бит памяти на элемент), это обычно работает, даже если оно линейно.
Приложение: Как сделать XOR. (исправлена ошибка)
000101001100 source
000101001010 target
000000000110 result of XOR
int n = 0; if (v) do { n++; } while (v &= (v-1)); return(n);
Две единицы говорят вам, что есть 2 ошибки и m-2 совпадения, где m - количество битов.