2011-01-26 124 views
1

我有一个短的随机数字输入,比方说int 0-999。如何从短随机数生成更长的随机数?

我不知道输入的分布。现在我想根据输入在0-99999范围内生成一个随机数,而不改变分布形状。 我知道有一种方法可以通过将输入分为999和多个99999来获得结果,从而将输入设置为[0,1]。但是,这种方法并没有涵盖所有可能的值,就像99999永远不会被击中一样。

+4

这听起来像你要求从你的随机数字源得到的熵比现有的要多。这是无法完成的。如果你正在寻找分散算法,那么你应该看看math.stackexchange.com – 2011-01-26 13:13:45

回答

1

假设你的输入是某种随机源的...

你可以把两个连续的输入并将它们组合:

input() + 1000*(input()%100) 

不过要小心。这依赖于具有大量熵的源,以便给定的输入号码不总是跟随相同的后续输入号码。如果您的来源是PRNG,它旨在以某种方式在数字0-999之间循环,此技术将无法使用。

对于大多数生产熵来源(例如/ dev/urandom),这应该可以正常工作。 OTOH具有生产熵源,您可以直接获取0-99999之间的随机数。

0

您可以尝试类似如下:

(input * 100) + random 

,其中随机是随机数介于0和99

的问题是,仅输入指定要使用的100系列。例如,50表示您将拥有5000到5100之间的数字(以保持类似的形状分布)。 5000到5100之间的数字取决于您。