有时需要随机数,条件是它们是唯一的。
经典的算法是保持循环,直到你偶然碰到不同的数字,一些伪代码:
minval = 0 ;
maxval = 4 ; // random max will be one less than maxval
val1 = random( minval , maxval ) ;
val2 = random( minval , maxval ) ;
while( val1 == val2 ) {
val2 = random( minval , maxval ) ;
}
我有一个时间紧迫和内存有限的程序,我想知道是否有任何算法可以避免连续循环暴力方法,而不使用额外的内存,如查找表。
也许是一个简单的解决办法,但这是一个又晚又累的夜晚。
有什么建议吗?
最佳答案
是的,您可以排除已经找到的号码,如下所示:
minval = 0 ;
maxval = 4 ; // random max will be one less than maxval
val1 = random( minval , maxval ) ;
val2 = random( minval , maxval - 1 ) ;
if(val2 >= val1) val2++;
第二次,指定一个小于第一个的间隔,并将已找到的数字上方的部分上移一个。