32 백만 개의 32 비트 값이 있습니다. 각 값에 대해 해밍 거리 5 내에서 다른 모든 값을 찾고 싶습니다. 순진한 접근 방식에서는 피하고 싶은 비교 가 필요합니다 .
이 32 비트 값을 정수로 처리하고 목록을 한 번 정렬하면 가장 중요하지 않은 비트에서만 다른 값이 매우 가깝게 끝났다는 것을 깨달았습니다. 이를 통해 정확한 해밍 거리에 대한 실제 쌍별 비교를 수행 할 수있는 더 짧은 "창"또는 숫자 범위를 가질 수 있습니다. 그러나 2 개의 값이 높은 순서의 비트에서만 변할 경우이 "창"외부로 끝나고 정렬 된 목록의 반대쪽 끝에 나타납니다. 예 :
11010010101001110001111001010110
01010010101001110001111001010110
해밍 거리가 1이더라도 매우 멀리 떨어져 있습니다. 두 값을 모두 회전해도 두 값 사이의 해밍 거리가 유지되므로 매번 왼쪽으로 32 회 회전 한 다음 목록을 정렬하면 2 개의 값이 적어도 하나의 정렬 된 목록에서 충분히 닫힙니다.
이 방법을 사용하면 좋은 결과를 얻을 수 있지만이 방법의 정확성을 공식적으로 설정하는 데 어려움을 겪고 있습니다.
해밍 거리 이하의 일치하는 값을 찾고 있다고 가정하면 실제로 32 비트 회전을 모두 수행해야합니까? 예를 들어 k = 1 이고 내 창 크기가 1000 인 경우 스트레이 비트가 8 개의 하위 비트 중 하나라도 나타나더라도 결과 숫자가 1000 개 이상 다르지 않기 때문에 최대 24 비트 회전을 수행해야합니다.