IDA*

引言:

  上次讲到的估价函数 f 与带二叉堆的bfs结合形成了astar算法;

  那么,f 函数能不能与dfs结合?

  

dfs是深度优先搜索,即一直向一个方向搜索,搜索完毕就返回;

但其实这样直接与估价函数结合可能会导致出错;

一旦估价函数出错,那么我们可能向下搜索一个不会出答案的分支;

导致浪费时间,导致超时;

 

所以我们最终选择将估价函数与 迭代加深的dfs 相结合;

f 为每个状态到目标状态的需要的步数。

当然 f 遵循 astar 中 f 定义的 估计值不大于实际步数 

深度限制回溯条件变为, 当前深度 + 估计值 > 深度限制 ,return;

这就是 IDAstar算法——迭代加深的Astar算法;

例题1: booksort

题意:

给定n本书,编号为1-n,在初始状态下,书是任意排列的,在每一次操作中,可以抽取其中连续的一段,再把这段插入到其他某个位置。

我们的目标状态是把书按照1-n的顺序依次排列,求最少需要多少次操作。

若操作次数>=5,输出“5 or more”。

这道题别看他它只需要四步搜索,但它的搜索规模其实很大,粗摸估计一次搜索最坏要560;

四次就是560^4;

这个肯定无法承受;

猜你喜欢

转载自www.cnblogs.com/lirh04/p/12899550.html