跳蚤算法:快速跳蚤算法
在原理当中讲了跳蚤算法的原型,用来获得x个0 to n范围内的不重复随机数。
初始化
For i=0 to n
a(i)=i
Next
乱序
For i=0 to n
r=int(rnd*(n+1))
Swap a(i),a(r)
Next
Sub Swap(V1,V2)
T=V1:V1=V2:V2=T
End Sub
拣出
For i=1 to x
b(i)=a(i-1)
Next
实际应用当中,x一般远远小于n。在乱序过程中,原始的算法是将a(0 to n)所有元素乱序,而我们取的仅仅是前面a(0 to x-1)元素的值。。原始算法的运算时间取决于n。如果n很大,哪怕我们取2个随机数也要循环n次。
假如把乱序代码改为
For i=0 to (x-1)
r=int(rnd*(n+1))
Swap a(i),a(r)
Next
我们可以发现:由于a(0 to x-1)每个元素均与a(r)随机交换,因此可以确保a(0 to x-1)是随机的。这种改进的算法便是“快速跳蚤算法”,当您需要在0 to n范围内获取x个不重复随机数的时候,需要的时间仅与x有关,与n无关。
在通常用途的默认情况下,我一般推荐您使用“快速跳蚤算法”,这是所有变种当中最实用的一个算法。
跳蚤算法:快速跳蚤算法
最新推荐文章于 2023-02-11 22:15:56 发布