随机生成特定范围内的整数序列

时间:2010-03-31 10:06:58

标签: algorithm math random sequence integer

我不确定如何把这个和我的数学技能不那么强。但这就是我需要的。

我想生成所有16位整数的列表(0-65535)。但是每当我这样做时,我想随机地对算法进行种子处理,每次列表以不同的整数开始,所有后续整数将生成一次,但也是随机顺序。

小例子(1-5):......

1,5,3,2,4

4,3,1,5,2

2,1,4,5,3 ......

任何帮助?

3 个答案:

答案 0 :(得分:4)

最简单的方法可能是生成所需数字列表and then shuffle it

答案 1 :(得分:3)

假设您没有安全要求,可能最简单的方法是创建Linear Congruential Generator (LCG)并在每次需要更改序列时选择新的乘数和/或增量。使用维基百科条目中的符号,如果您想要所有k位整数,则模数为m = 2 k 且条件1,2和3简化为:
1. c是奇数 2.对于任何整数x

,a = 1 + 4 * x

还有其他类似于LCG的发电机应该同样令人满意。

答案 2 :(得分:1)

  1. 创建整数列表。在您的示例中,从1到5;包括在内;
  2. 对其执行正确的随机播放。例如,Fisher-Yates shuffle。 “正确”部分很重要,因为不正确的混洗算法会产生偏差结果。
  3. 您没有说出您使用的语言,但这里有两种语言:

    PHP

    $arr = range(1, 5);
    shuffle($arr);
    

    爪哇

    List<Integer> list = new ArrayList<Integer>();
    for (int i=1; i<=5; i++) {
      list.add(i);
    }
    Collections.shuffle(list);