我需要生成一个数字列表(大约120个)。数字的范围从1到X(最大10),两者都包括在内。该算法应该使用相同数量的每个数字,或者至少尝试,如果一些数字少用一次,那就没问题。
这是我第一次制作这种算法,我创造了一次非常简单,但我很难理解如何做到这一点。我先尝试使用谷歌搜索,但不知道该怎么称呼这种算法,所以我找不到任何东西。
非常感谢!
答案 0 :(得分:3)
听起来你想要做的就是首先用你想要的数字填充一个列表然后随机播放该列表。一种方法是将每个数字添加到列表中,然后重复该过程,直到列表中包含任意数量的项目。之后,随机随机播放列表。
在伪代码中,生成初始列表可能如下所示:
list = []
while length(list) < N
for i in 1, 2, ..., X
if length(list) >= N
break
end if
list.append(i)
end for
end while
我将洗牌部分作为练习留给读者。
编辑: 正如评论中指出的那样,上面的数字总是比较大的数字更小。如果这不是您想要的,您可以按随机顺序迭代可能的数字。例如:
list = []
numbers = shuffle( [1, 2, ..., X] )
while length(list) < N
for i in 1, 2, ..., X
if length(list) >= N
break
end if
list.append( numbers[i] )
end for
end while
我认为这应该消除这种偏见。
答案 1 :(得分:-2)
您想要的是uniformly distributed
random number
(wiki)。这意味着如果您生成1到10之间的10个数字,那么列表中存在所有数字1到10的概率很高。
java中的Random()类提供了相当均匀的分布。所以就去吧。要测试,请检查:
Random rand = new Random();
for(int i=0;i<10;i++)
int rNum = rand.nextInt(10);
在结果中看到你是否得到1到10之间的所有数字。
可能有用的另一个类似讨论:Uniform distribution with Random class