预先:
- 首先你需要了解什么是A*算法(一种利用启发信息的有信息式搜索),它本身就是是对一致代价搜索的一种改进,这里不做过多的阐述。
过渡:
迭代加深(限制深度优先搜索的层数)为什么存在?
- 减小原先BFS存储空间的指数增长问题。O(b^d)->O(b*l),b为分支因子,d为解的深度,l为深度界限(不断加深的)。
- 减小DFS搜索的盲目性(应对树很深,但是目标解在较浅位置)。O(b^m)->O(b^l),m为最大深度。l为深度界限(不断加深的)。
改进:
IDA*(ID与A*结合)方法:
- 设置阈值评估值Fmax,只对评估结果小于阈值Fmax的节点进行探索。
- 如果没找到增加阈值继续进行A*探索。
!此处注意:很多人对于IDA*理解不同实现也不同,对于算法的实现也千奇百怪(不仅是启发函数,连增加阈值的方法也千奇百怪,最多的将新阈值为超过旧阈值的最小代价),不过总的还是要根据不同问题设计更好的算法。
IDA*特点:
对空间的消耗较少,由于剔除超阈值节点,所以从open列表选择节点拓展也是更快的。但是注意有出现重复搜索的老毛病。