数百万の32ビット値があります。各値について、ハミング距離5内の他のすべての値を検索します。単純なアプローチでは、これには比較が必要です。
これらの32ビット値を整数として処理し、リストを1回並べ替えると、最下位ビットのみが異なる値が非常に近くなることに気付きました。これにより、正確なハミング距離の実際のペアごとの比較を実行できる、より短い「ウィンドウ」または数値の範囲を持つことができます。ただし、2つの値が上位ビットでのみ異なる場合、それらはこの「ウィンドウ」の外側になり、ソートされたリストの両端に表示されます。例えば
11010010101001110001111001010110
01010010101001110001111001010110
ハミング距離は1ですが、両方が回転しても2つの値の間のハミング距離は保持されるため、左に32回回転してからリストを毎回並べ替えると、2つの値になる可能性がありますそのうちの少なくとも1つで並べ替えられたリストで十分に近くなります。
このアプローチは良い結果をもたらしていますが、このアプローチの正確性を正式に確立するのに苦労しています。
ハミング距離が以下の一致する値を探しているので、32ビットの回転をすべて行う必要が本当にあるのでしょうか?たとえば、でウィンドウサイズが1000の場合、下位8ビットのいずれかに浮遊ビットが現れても、結果の数値は1000を超えて変わらないため、最大24ビット回転する必要があります。
A[i].close