私の並列プログラミング クラスの課題の一部は、3 億 1,300 万の一意の整数のファイルを作成することです。2 つの乱数を掛け合わせて非常に広い範囲を取得すると思いますが、一意性を確認する最良の方法は何ですか?
配列を作成し、毎回一致する配列を検索する必要がありますか? それは非常に非効率的であるかのように思えます。
編集-問題は、最終的にリストをソートすることです(スレッド/マルチコアを使用して)ので、順次リストを持つことは機能しません。
You could fill the file up sequentially - the resulting file would look like:
0 1 2 3 4 5 6 7 8 9 ... 312999999
These numbers would be very simple to generate, and would be guaranteed to be unique.
並列プログラミングの割り当てについては、タスクを細かく独立した部分に分割する必要があると思います。313M は、32 ビットが表現できる最大数である 2G よりもまだ小さいです。私の提案は、32 ビットの数値を上位 16 ビットと下位 16 ビットに分割できることです。スレッドごとに固定の上位ビットを割り当て、スレッドは下位 16 ビットを生成します。次に、2 つの部分を組み合わせると、各スレッドによって生成されたすべての数値を異なるものにすることができます。