剪枝:
最优性剪枝
可行性剪枝
迭代搜索:最优性剪枝的变种
如果我们不确定答案,只知道答案比较小,我们可以从深度为1开始,不停地增加深度到2, 3, ...,直到能到达终点为止.事实上这个方法时间效率上是不如BFS的,但它的好处在于它是深搜,深搜的空间比较小,也不需要储存和判重所有的状态
对bfs的限制
用dfs的方法实现
特征就是可以在原矩阵的基础上改变,节省空间,时间换空间
剪枝优化原则:
1.直觉
2.正确性
实际应用时要多考虑搜索顺序
例题:斗地主
像这种牌肯定是出的越多越好.
首先考虑的是最暴力的方法,依次枚举上述的各种情况,肯定是稳T.(可以用来做暴力对拍)
尝试着改变枚举顺序,因为顺子的牌是最多的,每次一旦枚举到顺子就可以大量减少牌的数量,然后按照牌量减的大小 依次枚举四三二一就行了.
在数据随机下基本上就是能过了的
然后我们考虑切换枚举顺序,如果先枚举四,三呢?
因为四和三每种牌都只能有一个,而且特别少,所以肯定是能够枚举的.
我们注意到至多有7对三/四个,然后每个地方都需要3种情况的枚举,至多有128种情况.
接下来枚举顺子,顺子最多有4组,而且越多枚举到的可用顺子很少.
最后枚举单双,事实上单双根本就不用枚举了,直接就能双双,能单单就行了.
而这里存在的优化空间是在这个四和三带上的,我们不需要确定它们带了哪张牌,那我们就直接记录有多少单和对需要被带就行了,如果最后不可行,就直接退出即可.
靶形数独
A*