简单的伪随机算法

Ste*_*ger 5 c# random test-data

我需要一个伪随机生成器,它将一个数字作为输入并返回另一个数字,它是可重现的并且似乎是随机的.

  • 每个输入数字应恰好与一个输出数字匹配,反之亦然
  • 相同的输入数字始终会产生相同的输出数字
  • 靠近的顺序输入数字(例如1和2)应该产生完全不同的输出数字(例如,1 => 9783526,2 => 283)

它一定不是完美的,它只是创建随机但可重现的测试数据.

我用C#.


我前段时间写了这段有趣的代码,它产生了随机的东西.

  public static long Scramble(long number, long max) 
  {
    // some random values 
    long[] scramblers = { 3, 5, 7, 31, 343, 2348, 89897 };
    number += (max / 7) + 6;
    number %= max;
    // shuffle according to divisibility
    foreach (long scrambler in scramblers) 
    {
      if (scrambler >= max / 3) break;
      number = ((number * scrambler) % max) 
        + ((number * scrambler) / max);
    }

    return number % max;
  }
Run Code Online (Sandbox Code Playgroud)

我希望有更好,更可靠的东西,使用任何数量的大小(没有最大参数).

这可能是使用CRC算法解决的吗?或者有点洗牌的东西.

Mus*_*sis 3

您(也许)可以使用 Random 类在 C# 中轻松完成此操作:

public int GetPseudoRandomNumber(int input)
{
    Random random = new Random(input);
    return random.Next();
}
Run Code Online (Sandbox Code Playgroud)

由于您使用输入显式播种随机,因此每次给定相同的输入值时,您都会获得相同的输出。

  • 但他的第一个要求是“每个输入数字应该与一个输出数字完全匹配,反之亦然” - 反之亦然将不适用于您的解决方案。 (2认同)