我需要在一个特定的范围之间生成数字,在第一个周期之后,如果数字不适合,我需要从范围中删除它。
示例:
我要在1-55范围内生成随机数。我想要数字24,但是是通过随机发生器生成的。在第一个周期之后,随机发生器产生了第4个。在下一个循环中,我想从相同的范围生成随机数,但不包括4号。所以范围是- 1,54 / {4}。如果在下一个周期产生第28号,范围将改为- 1,54 /{4, 28 }。循环将重复,直到不生成数字24。
我需要它作为我的进化算法。如果我使用大范围,那么需要很长时间才能通过随机数生成算法生成所需的数字。如有任何建议,我将不胜感激。
发布于 2013-03-07 22:36:39
从包含全部范围的数组开始:
int range[55];
std::iota(range, range+55, 1);从n = 55开始。
现在,在每一步:
i到0选择一个随机数n-1range[i]与range[n-1]交换。n如果您选择的索引值为24,那么您就完成了。24之前选定的值位于数组的右侧,其余未选定的值位于左侧。
当然,我认为你需要知道这些价值观。如果您只需要生成值24,那么int generate24() { return 24;}就应该这样做。如果您只需要知道生成24所需的步骤有多少,那么在1到55的范围内是均匀分布的,所以您可能可以用一个随机数生成来伪造它。
https://stackoverflow.com/questions/15283035
复制相似问题