跳蚤算法:基本原理。

跳蚤算法是一种用于高效生成不重复随机数的方法,源于对扑克洗牌过程的观察。它通过随机交换数组元素来打乱初始顺序,避免了传统方法中检查重复值的低效过程。算法优点是运算时间稳定、高效,但需要大量存储空间。不适合浮点数操作,且当需要随机数的范围过大时,如超过10000000,不推荐使用。
摘要由CSDN通过智能技术生成

跳蚤算法:基本原理。
一、算法的诞生及设计初衷。

传统教材中取得x个0 to n之间不重复随机数的方法一般是这样:

(x个不重复随机数输出到a()数组)

For i=1 to x

Do

r=int(rnd*(n+1))

c=<确定r不包含在a()内>

Loop Until c

<将r添加到a()>

Next

由于r可能与a()内的值重复,且每次循环都要历遍a(),因此该算法的效率很低。而且r是否命中到a()存在一定的随机性,取得一个合适的r要循环多次(次数不确定),从运算时间上来说是不可预见的。

不重复随机数是编写程序经常需要的算法。因此,出于高效、稳定的需要,通过对扑克洗牌的观察,设计出如下算法。由于不清楚这个算法的学名,因其在工作时数值随机交换,好似跳蚤一样跳来跳去的,因此给它取个有趣的名字叫“跳蚤算法”,并在CSDN的VB版多次提供。

“跳蚤算法”有许多改进方式及应用方法。以下仅是最基本的“跳蚤算法”,以便于描述这个算法的原理。

这个算法的优点在于运算时间稳定、高效,缺点是需要大量的存储空间。需要的空间与n的取值有关。通常情况下,如果您要从s to e的范围内选择x个随机数,假如e-s的绝对值大于10000000一般我不推荐您使用这个算法。如果这个绝对值大于2000000000,在VB下是难以做到的。

该算法原则上不适用于浮点数。

二、跳蚤算法原理

a()为一个数组࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值