三种“随机”算法介绍

三种“随机”算法介绍

本文主要介绍蒙特卡洛(Monte Carlo)算法、拉斯维加斯(Las Vegas)算法和舍伍德(Sherwood)算法。

蒙特卡洛算法与拉斯维加斯算法

蒙特卡罗算法并不是一种算法的名称,而是是一类随机方法的统称。这类方法的特点是,可以在随机采样上计算得到近似结果,随着采样的增多,得到的结果是正确结果的概率逐渐加大,但在(放弃随机采样,而采用类似全采样这样的确定性方法)获得真正的结果之前,无法知道目前得到的结果是不是真正的结果。

从特性特性来说,我们知道,既然是随机算法,在采样不全时,通常不能保证找到最优解,只能说是尽量找。那么根据怎么个“尽量”法呢,我们我们把随机算法分成两类:

(1)蒙特卡罗算法:采样越多,越近似最优解;无法证明当前解是否为最优解。
(2)拉斯维加斯算法:采样越多,越有机会找到最优解;如果找到最优解能够立刻证明是最优解。

举个例子,假如筐里有100个苹果,让我每次闭眼拿1个,挑出最大的。于是我随机拿1个,再随机拿1个跟它比,留下大的,再随机拿1个……我每拿一次,留下的苹果都至少不比上次的小。拿的次数越多,挑出的苹果就越大,但我除非拿100次,否则无法肯定挑出了最大的。这个挑苹果的算法,就属于蒙特卡罗算法——尽量找好的,但不保证是最好的,即使找到了前99个苹果中最大的那个,也不能保证当前最大的苹果就一定是100个中最大的。

而拉斯维加斯算法,则是另一种情况。假如有一把锁,给我100把钥匙,只有1把是对的。于是我每次随机拿1把钥匙去试,打不开就再换1把。我试的次数越多,打开(最优解)的机会就越大,但在打开之前,那些错的钥匙都是没有用的。这个试钥匙的算法,就是拉斯维加斯算法——尽量找最好的,但不保证能找到,但是一旦锁被打开了,就一定是找对了钥匙,剩下的钥匙可以不必理会。

舍伍德算法

个人认为舍伍德算法严格意义上不是一个算法,而是一个随机处理过程,我将原始算法经过舍伍德处理后的算法称为舍伍德算法。舍伍德算法通过增加一个较小的额外开销从而使得算法的复杂度与具体实例x无关,虽然此时的算法仍有可能发生复杂度比较大的情况,但这种偶然行行为只是由于算法所做的概率选择引起的。我们可以通过多次执行算法来避免最差情况。

实际上几乎所有查找与排序算法都可以使用舍伍德算法进行处理,排序算法在执行排序之前对数据进行随机打乱就是一个典型的方法。某些有序表的查找也可以在查找前随机找一个数进行比较,从而使算法具有较好的平均性能。比如像快速排序中,某些特定的业务场景可能会产生特定性质的序列,有时这种序列恰好就是快速排序的“最糟糕情况”,当采用先原地打乱再进行快排,由于每次随机化的结果将不带有业务特性,可以避免这种情况发生。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

邵政道

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值