算法分析

一些简单的算法
八皇后问题
查找(哨兵)
八皇后问题
八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。八皇后问题可以推广为更一般的 n 皇后摆放问题:这时棋盘的大小变为 n1×n1,而皇后个数也变成 n2。而且仅当 n2 = 1 或 n1 ≥ 4 时问题有解。
问题解析:8*8 棋盘上每行每列都有一个皇后,且任意两皇后不能处于同一行、同一列、同一斜线上
为了简化问题,下面讨论四皇后问题。回溯法从空棋盘开始,首先把皇后 1 摆放到它所在行的第一个位置,也就是第一行第一列,得到图 8.7 (a)。
对于皇后 2,在经过第一列和第二列的尝试后,摆放到第二行第三列,得到图 8.7 (b)。
对于皇后 3,摆放到第三行的哪一列都会引起冲突 (即违反约束条件),进行回溯,回
到对皇后 2 的处理,把皇后 2 摆放到下一个位置,也就是第二行第四列,得到图 8.7 (d)。
对于皇后 3,在经过第一列的尝试后,摆放到第三行第二列,得到图 8.7 (e)。
对于皇后 4,摆放到第四行的哪一列上都会引起冲突,进行回溯,回到对皇后 3 的处
理;皇后 3 摆放到第三行的哪一列上都会引起冲突,再次进行回溯,但此时皇后 2 位于棋
盘的最后一列,继续回溯,回到对皇后 1 的处理,把皇后 1 摆放到第一行第一列,得到
图 8.7 (g)。
接下来,把皇后 2 摆放第二行第四列的位置,把皇后 3 摆放到第三行第一列的位置,把皇后 4 摆放到第四行第三列的位置,得到四皇后问题的一个解,如图 8.7 (j) 所示。
算法
【算法】设函数 Queen 实现 n 皇后问题,皇后 k 摆放在 k 行 x [k] 列的位置,算法用伪代码描述如下。
1 | 算法8.3:回溯法求解n皇后问题Queen |
实现
1 | /*************** |
遍历查找(哨兵)
利用观察哨
,则无需判断查找是否越界
较传统蛮力查找,设置观察哨
他们的时间复杂度都是 O (n),而系数相差一倍。实验表明,设置观察哨
之后的算法在表长大于 1000 时,一次顺序查找的时间几乎一半
算法 c++ 核心代码
1 | int SeqSearch2(int r[],int n,int k) //数组r[1]~r[n]存放查找集合 |
以后想起来什么再写,先到这,继续写 python
- 标题: 算法分析
- 作者: tsvico
- 创建于 : 2018-07-11 00:06:40
- 更新于 : 2022-05-22 16:05:38
- 链接: https://blog.tbox.fun/2018/d68e5e2f.html
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。