前面介绍了通过回溯法求解八皇后问题
但是当皇后的数量较多时,回溯法非常地耗时。所以提出了一种基于概率地随机放置皇后的方法。
每次都将8个皇后随机放在8行,如果满足条件就成功,否则全部重新放置,直到成功为止。
实验表明,这样地放置方法比回溯法更快。
还有一种优化就是对于一部分皇后随机放置,另一部分皇后采用回溯法放置,这样效果会更好。
代码
1 |
|
结果
分别利用回溯法和 Las Vegas 概率算法求解 n 皇后问题的一个解,对它们所耗的时间进行比较。
当 n=8 时,回溯法 0.084ms,Las Vegas 概率算法 0.029 ms。
当 n=20 时,回溯法 133.581ms,Las Vegas 概率算法 9.314 ms。
改进
Las Vegas 概率算法每次放置皇后的位置都是随机的,这样过于悲观。可以使用 Las Vegas 算法放置前一部分的皇后,后面的皇后使用回溯法放置,但不考虑重放前面通过 LV 算法放置的皇后。
代码实现方面只要将后面的几行改为:
1 | if(nb = 0 || i = stepVegas) //跳出循环 |
改进后的代码:
1 |
|