[IDA*]刷题记录之迭代加深

87 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路 持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第3天,点击查看活动详情

首先浅谈一下IDA_Star算法,他本质上是基于迭代加深的A_Star算法;那么何为迭代加深呢。举个例子,

image.png

图中一个方格的

左上角数字是F():移动总代价,

左下角是G():从起点移动到当前点花费的代价,

右下角是H():从目前点到终点还要花费的预估代价

在我们进行A_Star算法的过程中会逐渐算出我们相邻点的F()=G()+H(),

并且在二叉堆中找到具有最小的F()的点来进行下一步搜索,虽然基于贪心,我们会忽略掉一 些F()很大的点的搜索。

因此这个过程仍然会不可避免的用一些完全没希望到达终点的点来拓展搜索,而我们的迭代加深,会在每一次进行A_Star算法时为我们进

行拓展的点的F()加上一个最高上限,如果我们用于拓展的点的F()大于了这个最高上限,

那么我们就停止拓展。🆗那我们该如何具体实现呢?我们在for循环中每次从小到大的给出一

个限制深度来进行A_Star搜索,如果在这次深度中成功的找到了终点。那行,我们退出这个循环,因为我们是从小到大给出限制,也就是我们的搜索代价F(),所以说第一次找到终点所用的F()肯定是最小的;