随机化算法(4) — 拉斯维加斯(Las Vegas)算法
来源:互联网 发布:mac ls 不能用 编辑:程序博客网 时间:2024/05/16 10:54
- 新博客 : http://blog.tankywoo.com
- 个人Wiki : http://wiki.tankywoo.com
- 个人主页 : http://tankywoo.com
已出连载:
1.《随机化算法(1) — 随机数》
2.《随机化算法(2) — 数值概率算法》
3.《随机化算法(3) — 舍伍德(Sherwood)算法》
正文:
悟性不够,这一章看代码看了快一个上午,才理解。
上一章讲过《概率算法(3) — 舍伍德(Sherwood)算法》,但是他的有点是计算时间复杂性对所有实例而言相对均匀,而其平均时间复杂性没有改变。而拉斯维加斯算法怎么显著改进了算法的有效性。
拉斯维加斯算法的一个显著特征是它所作的随机性决策有可能导致算法找不到所需的解。因此通常用一个bool型函数表示拉斯维加斯算法。
考虑用拉斯维加斯算法解决N皇后问题:
对于n后问题的任何一个解而言,每一个皇后在棋盘上的位置无任何规律,不具有系统性,而更象是随机放置的。由此容易想到下面的拉斯维加斯算法。
在棋盘上相继的各行中随机地放置皇后,并注意使新放置的皇后与已放置的皇后互不攻击,直至n个皇后已相容地放置好,或已没有下一个皇后的可放置位置时为止。注意这里解决的是找到其中一个方法,求不是求出N皇后的全部解。
这里提前说明一下,否则不好理解。
接下来的这个用Las Vegas算法解决N皇后问题,我们采用的是随机放置位置策略和回溯法相结合,具体就是比如八皇后中,前几行选择用随机法放置皇后,剩下的选择用回溯法解决。
这个程序不是很好理解,有的地方我特别说明了是理解程序的关键,大家看时一定要认真了,另外,王晓东的书上先是用单纯的随机法解决,大家可以先去理解书上这个例子。然后再来分析我这个程序。不过那本书上关于这一块错误比较多,大家看时要注意哪些地方他写错了。
拉斯维加斯算法解决N皇后代码:
依然用到了RandomNumber.h头文件,大家可以去看下第一章,我就不贴出来了。
剩下部分的代码:
注意QueensLV()函数是这个程序的精髓所在。
Queen.h头文件
Queen.cpp文件
Main.cpp主文件:
在8皇后问题中:
1.stopVegas=0表示完全使用回溯法解决问题。因此一定可以得到一组解。
2.stopVegas=8表示完全实用随机法解决问题。因此一定可以得到一组解。
注意书上说解决8皇后问题时,列出了一个不同stopVegas值时,所对应的算法成功率,在stopVegas=8时,他写着是0.1293,我个人认为是错的。接下来我说下自己这么理解的原因:
首先,这个程序为何会造成有失败的情况,那就是因为在随机求出前stopVegas行成立时,不代表后面N-stopVegas行用回溯就可以成立,因为这不是一个彻底的回溯。它是从stopVegas+1行开始计算,回溯不成立最后返回时,也只停留在stopVegas。
而我们在完全随机时,那么它就是反复调用随机位置放置n个皇后的Las Vegas算法,直至放置成功。所以当stopVegas=8时,他的成功率也应该是100%。
另外在stopVegas=3时,成功率等于0.49,趋近于0.5,大家可以试试,基本上每运行两次会有一次回来结果。
如果上面我的理解有错,欢迎大家指出,我的博客(www.WuTianQi.com)。
下一篇我会写《随机化算法(5) — 蒙特卡罗(Monte Carlo)算法》。
www.WuTianQi.com Tanky Woo原创,欢迎转载,转载请附上链接,请不要私自删除文章内任何关于本博客的链接。
- 随机化算法(4) — 拉斯维加斯(Las Vegas)算法
- 随机化算法(4) — 拉斯维加斯(Las Vegas)算法
- 0047算法笔记——【随机化算法】拉斯维加斯(Las Vegas)算法和n后问题
- 0047算法笔记——【随机化算法】拉斯维加斯(Las Vegas)算法和n后问题
- 美国 拉斯维加斯 ( LAS VEGAS ) WSA 展览会
- 0048算法笔记——【随机化算法】拉斯维加斯随机化算法求解整数因子分解中的因子分割问题
- 0048算法笔记——【随机化算法】拉斯维加斯随机化算法求解整数因子分解中的因子分割问题
- LVW(Las Vegas Wrapper)特征选择算法简单介绍
- Las Vegas
- 八皇后 拉斯维加斯算法
- 随机化算法
- 随机化算法
- 【随机化算法】
- 随机化算法
- 随机化算法
- 随机化算法
- 随机化算法
- 随机化算法
- UVa 11082 Matrix Decompressing 最大流
- 不通过App Store,在iOS设备上直接安装应用程序
- 阿里发布“码上淘”平台 连接更多实体店
- 五个免费UML建模工具推荐
- CountDownLatch与CyclicBarrier
- 随机化算法(4) — 拉斯维加斯(Las Vegas)算法
- qsort函数使用
- CodeForces 408A
- iOS 7.1使用企业应用部署方式无法安装app
- 第二次实验 快速排序 实习与工作
- 你知道为什么Xcode6中Swift没有智能提示和自动补全功能吗 ?
- CodeForces 405A
- 让Qt应用程序跑在Android上
- <MFC笔记>多线程编程之线程的特性