关于随机算法的研究

随机算法是一种初看起来很难理解的算法,特别是当它可以被用来解决一些看起来结果比较严谨的问题时。这里,我对这个算法一边学习一边记一些心得。

随机算法是什么?随机算法使用了一定程度的随机作为逻辑中的一部分。一般会使用完全随机的输入指导算法的行为,期望在所有可能的结果中找到一个平均意义上性能较好的结果。算法的性能是随机输入定义的变量;所以或者运行时间,或者输出,或者两者都是随机的变量。

下面我要仔细分析为什么很多问题要求严谨的解答结果,却可以使用随机算法。或者说,这类问题会有什么特点。不过多说一点,我忽然想到了一个之前接触过的算法,模拟退火法。真的和很多随机算法很像。模拟退火法其实应该就是一种随机算法。但是模拟退火法一直基于一种假设,每一次尝试都会得到一个局部的较优解,然后通过不断改变尝试的条件,最后得到一个全局的最优解。说的有点远了,而且还是系统的来看一些随机算法的介绍。

看到一个介绍说,在很多问题中,可行性的算法是唯一可行的解决问题的方法。

读了一下在Wiki百科上关于随机算法的介绍,有一点很好理解,随机算法的一个重要用途是防止极端不好的情况出现和防止其他人恶意的攻击。比如,快速排序,平均情况下复杂度是nlog(n),但是当数组已经有序时则退化为pow(n, 2)。比如在使用随机数生成密码的算法中,使用了伪随机数,等等都是可能出现的问题。这中场合下应该考虑使用随机算法。

还是看一些用随机算法可以解决的问题,感受一下:

 "

健身课开始了。教练说‘请大家找到一个地方站好,地方要足够大,以保证你的手臂不会碰到别人的手臂。’大家开始试图找到自己的地方。几分钟过去了,最后教练非常不高兴,想让你写一个程序,帮助大家找到合适的位置。

你可以得到房间的大小(宽和高)。对每一个学生,他有一个圆形的范围来保证他的手臂不会碰到别人的手臂。每个人的圆形范围要不想交,但是可以接触。每一个学生必须站在房间内,但是他的手臂可以伸展到房间外部。房间足够大,大小是所有学生要求的圆形的总和的5倍。

看一下关于使用随机算法解这个问题的参考答案:

“首先按照半径的大小进行排序。然后我们一个一个的把圆放到房间里,对每一个圆我们把它随机的放在房间中。然后我们检查它是否和其它的圆交叠,如果交叠了,我们就重新计算一个随机的位置,直到我们把所有的圆放进了房间中。

当我们把圆都放到了房间中,我们就成功的解决了这个问题。问题是我们为什么可以用这种方法有效地找到解。要了解这一点,让我们看看坏点的集合,坏点的意思是它不能放进房间中因为它和其它的点有交叠的部分。如果我们现在放圆j,半径是r(j)。然后它和前面的一个圆i有交叠。这表示圆i和圆j圆心之间的距离小于r(i)+r(j)。这表示坏点是集合是一个以r(i)+r(j)为半径的圆。

所有坏点集合的总体面积是多大?因为是一组圆,面积最大是所有圆面积的集合。(它可能会更少,因为圆之间有交叠;但是不可能更多)。因为我们是按照圆面积递减的顺序放置的,所以r(j)<=r(i),这样第i个坏圆的面积最大pi*pow((2r(i), 2) = 4*pi*pow(r(i), 2)。因为圆面积最多是房间的80%,所以我们有至少1/5的机会找到一个好点。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值