八皇后问题各种解法分析

           最近学习算法分析,突然对八皇后问题十分感兴趣,下面是我研究一段时间后的思想汇总。希望能够引起各位算法爱好者的共鸣,当然如果有什么遗漏之处希望互相交流。

 

一:回溯法

      这种算法想必学习计算机算法分析与设计的人都应该知道,说白了,这个算法就是一个搜索算法,对一棵树进行深度优先搜索,但是在搜索的过程中具有自动终止返回上一层继续往下搜索的能力,这个算法其实就是一个搜索树,对部分节点进行了剪枝是一种可行的算法,对八皇后这样皇后数较少的问题还能够解决,如果皇后数再大一点就无能为力了,当然我们通过这学习了一种算法。至于具体算法怎么实现在此就不一一详述了,因为大部分网站都有具体的源码,核心思想也基本相同,只是编程应用的数据结构有所不同而已。

 

二:概率算法

     这种算法网络上很少有,在此我只是提供一点思路供爱好者探讨。

     基本思想:首先应用随机函数在一个8*8的矩阵中放入合适的4个皇后(即一半的皇后)然后再应用之前的回溯的方法进行搜索,随后循环这样的一个过程,当时间容许的情况下,很快就可以找到满足所有的解。当然这种方法对回溯法只是进行了一点点的改动,但时间复杂度上将有很大的提高。算法源码在此也不予提供,有兴趣的可以与我联系。

 

三:A*算法

      这种算法原本是人工智能里求解搜索问题的解法,但八皇后问题也同样是一个搜索问题,因此可以应用这种方法来进行求解。这里关于A*算法的定义以及一些概念就不提供了,大家可以上网进行搜索,网上有很多关于A*算法的详细介绍。如果有兴趣的朋友可以借阅一本人工智能的书籍上面有关于A*算法求解八皇后问题的详细解答过程,在此我就不多说了,我只是提供一种学习的思路。

 

四:广度优先搜索

     这个是和回溯法搜索相反的一种方法,大家如果学过数据结构的应该知道,图的搜索算法有两种,一种是深度优先搜索,二种是广度优先搜索。而前面的回溯算法回归到图搜索的本质后,发现其实是深度优先搜索,因此必定会有广度优先搜索解决八皇后问题,由于应用广度优先搜索解决八皇后问题比应用深度优先搜索其空间复杂度要高很多,所以很少有人去使用这种方法,但是这里我们是来学习算法的,这种算法在此不适合,不一定在其他的问题中就不适合了,有兴趣的朋友可以参考任何一本数据结构的数据上面都有关于广度优先搜索的应用。

     总结:上面我对八皇后问题的这种算法只是起了一点抛砖引玉的作用,没有深入讲解,一是自己时间有限,二是自己研究的也不够彻底,在此只能提供一点点解题思路希望大家看到后可以有一点前进的方向,最后说一下其实八皇后问题还可以应用一些更加高级的算法进行求解,例如遗传算法,蚁群算法,粒子群算法等等,这些算法我还在研究中希望有兴趣的朋友可以和我交流。以上都仅为个人观点,如果错误之处请指正本人不胜感激。

你可能感兴趣的:(算法分析)