随机数生成

时间:2009-11-23 14:35:07

标签: algorithm

我需要一个随机数生成算法,为特定输入生成一个随机数。但每次获得相同的输入时,它将生成相同的数字。如果这种算法在互联网上可用,或者我必须建立一个。如果存在,任何人都知道,请告诉我。 (c,c ++,java,c#或任何伪代码都会有所帮助)

提前致谢。

7 个答案:

答案 0 :(得分:4)

您可能希望查看内置的Java类Random.该描述符合您的要求。

答案 1 :(得分:3)

通常,随机数生成器的标准实现取决于种子值。 您可以使用标准随机数,将种子值设置为输入的某个哈希函数。

C#示例:

string input = "Foo";
Random rnd = new Random(input.GetHashCode());
int random = rnd.Next();

答案 2 :(得分:2)

我会使用像SHA或MD5这样的哈希函数,这样每次都会为给定的输入生成相同的输出。

在java中生成哈希的示例是here

答案 3 :(得分:2)

Mersenne Twister算法是一个很好的可预测随机数生成器。大多数语言都有实现。

答案 4 :(得分:2)

怎么样..

public int getRandonNumber()
{
   // decided by a roll of a dice. Can't get fairer than that!
   return 4;
}

或者你每次都想要一个随机数?

: - )

答案 5 :(得分:1)

this这样的代码应该对您有用:

MIN_VALUE + ((MAX_VALUE - MIN_VALUE +1) * RANDOM_INPUT / (MAX_VALUE + 1))
  • MIN_VALUE - 下限
  • MAX_VALUE - 上限
  • RANDOM_INPUT - 输入数字

答案 6 :(得分:1)

所有伪随机数生成器(计算机上大多数RNG都是这样)将从起始输入即种子生成相同的数字序列。因此,您可以使用您选择的编程语言中的任何RNG。

鉴于您需要来自给定种子的一个样本,我将避开Mersenne Twister和其他具有良好统计特性的复杂RNG,因为您不需要它。您可以使用简单的LCG,也可以使用像MD5这样的哈希函数。 LCG的一个问题是,对于小种子,下一个值总是在同一个区域,因为模数不适用,所以如果您的输入值通常很小,我会使用MD5。