約 600 万の一意の配列を生成する C 関数があります。これらの配列には常にそれぞれ 17 の要素があり、各要素は 0 から 16 までの整数です。また、同じ種類の約 600 万の一意の配列を生成する、その関数のわずかに変更されたバージョンもあります。私の問題は、2 番目の結果が最初の結果よりも約 45,000 少ないことです。これらの結果がどのようなものかを確認したいと思います。
したがって、私のアプローチは、2番目の関数のすべての結果を単純に保存し(電卓は、メモリ内に保持するのに十分な400 mbを超えてはならないことを示しています)、最初の結果を調べて、存在しません。
一般的なアプローチが理にかなっていると仮定すると(そうでない場合は教えてください)、私が探しているのは、約600万の一意の順列を保持できる適切なデータ構造です(理想的にはCで適切に実装されています)
[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]
(またはその何らかの変換) を実行し、それらに対して高速メンバーシップ テストを実行します。タイトルが示すように、私はどのデータ構造が機能するかについていくつかの疑いを持っていますが、試行またはハッシュマップがこれに最適な選択であるとは確信していません.
これは、別のアルゴリズムの欠陥を検出するためのアルゴリズムであり、本番環境で使用されるものではありません。私はこれをコード化して人間の言葉で比較的迅速に結果を返す方法でこれを行うことに興味があります.