我的并行编程课的部分作业是创建一个包含 3.13 亿个唯一整数的文件。我想我会将两个随机数相乘以获得非常大的范围,但是检查唯一性的最佳方法是什么?
我应该创建一个数组并每次都在数组中搜索匹配项吗?这似乎效率很低。
编辑-问题是最终对列表进行排序(使用线程/多核),因此顺序列表不起作用。
您可以按顺序填充文件 - 生成的文件如下所示:
0 1 2 3 4 5 6 7 8 9 ... 312999999
这些数字很容易生成,并且保证是唯一的。
对于并行编程任务,我认为您可能需要将任务分成小而独立的部分。由于 313M 仍然比 2G 少,这是 32 位可以表示的最大数量。我的建议是您可以将 32 位数字分成高 16 位和低 16 位。对于每个线程,您分配一个固定的较高位,线程生成较低的 16 位。然后你把这两个部分结合起来,这样你就可以保持每个线程生成的每个数字都是不同的。