私は N < 2^n のランダムに生成された n ビットの数値をファイルに保存しており、その検索にはコストがかかります。数値 Y が与えられた場合、ファイル内で最大 k ハミング距離である数値を検索する必要があります。Yから。これは、私の場合は実行できない最悪のケースのルックアップである C(n 1) + C(n 2) + C(n 3)...+C(n,k) を呼び出します。メモリ内の各ビット位置での 1 と 0 の分布を格納して、ルックアップの優先順位を付けてみました。したがって、ビット i が 0/1 である確率を保存しました。
0 から n-1 までのすべての i に対して Pr(bi=0)、Pr(bi=1)。
しかし、N が大きすぎて、すべてのビット位置で 1/0 がほぼ均等に分布しているため、あまり役に立ちませんでした。このことをより効率的に行う方法はありますか。今のところ、n=32、N = 2^24 と仮定できます。