C 随机数创建

C 随机数创建,c,random,random-sample,C,Random,Random Sample,我需要在一个数组中生成100随机索引,数组大小为5000arr[5000]。我认为rand()将使用更多的CPU,所以我不想循环100次。我只想调用它一次,并希望有一个随机数组索引的机制。我的想法是对前20个索引使用随机值,并生成一个偏移量,然后继续添加到生成的随机值中。i、 e如果10是前20个索引的随机值,那么如果偏移量是6,那么我的随机数将是10,16,22,28…等 你认为这是个好主意吗?你能推荐其他的吗?谢谢。这是一个可怕的想法,结果值根本不是“随机”的 只需做一个循环,并为您需要的每

我需要在一个数组中生成
100
随机索引,数组大小为5000
arr[5000]
。我认为
rand()
将使用更多的CPU,所以我不想循环100次。我只想调用它一次,并希望有一个随机数组索引的机制。我的想法是对前20个索引使用随机值,并生成一个偏移量,然后继续添加到生成的随机值中。i、 e如果
10
是前20个索引的随机值,那么如果偏移量是
6
,那么我的随机数将是
10,16,22,28…等

你认为这是个好主意吗?你能推荐其他的吗?谢谢。

这是一个可怕的想法,结果值根本不是“随机”的

只需做一个循环,并为您需要的每个号码调用
rand()
。它不会“使用更多的CPU”(比什么更多?),它会很好


当然,请注意,
rand()
充其量只是一个典型的伪随机生成器,但仍然比您的方法要好。

使用rand()是一个更好的主意。然而,如果你真的想做你的伪随机生成器(对于99%的情况来说,这不是正确的答案),那么看看——它背后的数学很简单,它是libc的random()实现的基础。你可以试着用同样的方法来体验乐趣!还有一个

调用
rand()
100次不会有问题。即使调用rand()~10 mil次也不会比避免调用rand的大多数方法更糟糕……您希望实现的伪随机性的质量是什么?也就是说,没有高质量的随机指数有多重要?无论如何,我建议遵循Arvind关于LCG的说法。如果随机性真的很重要,那么就去实现Mersenne Twister。在任何情况下,LCG在CPU方面都非常便宜。我刚才给出了一个“100”表示“arr[5000]”的例子,实际上我有
2000*arr[5000]
,我需要从
5000
的每个数组中获得
2000
随机索引。你仍然认为
rand()
不会占用CPU。也许我的想法没有精确的随机数,但至少每次当特定范围的
rand()
给出不同的数字并添加偏移量时,我都有不同的数字。