如何创建一个非常大的唯一整数数组?

时间:2012-05-10 04:18:42

标签: c++ arrays random numbers

我的并行编程类的一部分作业是创建一个包含3.13亿个唯一整数的文件。我想我会将两个随机数加在一起得到一个非常大的范围,但检查唯一性的最佳方法是什么?

我应该每次创建一个数组并搜索数组吗?这似乎效率很低。

编辑 - 问题是最终对列表进行排序(使用线程/多核),因此使用顺序列表不起作用。

2 个答案:

答案 0 :(得分:8)

您可以按顺序填充文件 - 生成的文件如下所示:

  

0 1 2 3 4 5 6 7 8 9 ... 312999999

这些数字生成起来非常简单,并且保证是唯一的。

答案 1 :(得分:2)

对于并行编程分配,我想你可能需要将任务分成小而独立的部分。 因为313M仍然比2G更垃圾,这是32位可以代表的最大数量。 我的建议是你可以将32位数字分成更高的16位和更低的16位。对于每个线程,您分配一个固定的高位,线程生成低16位。然后将两部分组合在一起,这样就可以保持每个线程生成的每个数字都不同。

相关问题