我需要得到均匀分布的随机数。问题是我每次应用程序开始检查某个 MAX 数字时都需要,然后在从 0 到 MAX 的所有数字上随机进行,而不在同一数字上传递两次(直到向上取整)。
现在我正在使用: arc4random()%maxNumber
但这确实有问题,因为我连续 3 次在同一号码上获得很多回报。
请帮忙。
我需要得到均匀分布的随机数。问题是我每次应用程序开始检查某个 MAX 数字时都需要,然后在从 0 到 MAX 的所有数字上随机进行,而不在同一数字上传递两次(直到向上取整)。
现在我正在使用: arc4random()%maxNumber
但这确实有问题,因为我连续 3 次在同一号码上获得很多回报。
请帮忙。
1) 获取随机数
2) While (number is in used set) number = (number + 1) % MAX
3) 将数字添加到已使用的集合中
这是获取唯一随机数的标准算法
这就是我最终所做的:
-(NSInteger)getNextRandomNumber :(NSInteger)maxNumber{
if (indexSet == nil){
indexSet = [[NSMutableIndexSet alloc] init];
}
if ([indexSet count] >= maxNumber){
[indexSet init];
}
NSInteger randomGen = arc4random_uniform(maxNumber);
BOOL foundNumber = FALSE;
while (!foundNumber) {
if ([indexSet containsIndex:randomGen]){
randomGen = arc4random_uniform(maxNumber);
}else{
[indexSet addIndex:randomGen];
foundNumber = TRUE;
}
}
return randomGen;
}
如果您使用它,请注意释放对象,另外,我想我可能会错过一个数字(不确定)在我的情况下没关系,所以......