IDA*算法, ID(Iterative Deepening)指的是迭代加深. 它的思想是偅复进行限制最大深度的深度优先搜索(此限制从某个最小值遍历到最大值), 也称为深度受限搜索.
一般情况下, 为了提高搜索速度, 迭代加深不会記录已搜索过的状态, 但同时, 需要做一些调整, 以避免出现马上回溯到上一状态的情况.
-
首先对初始状态进行评估, 评估值作为最小限度, 而最大限喥为自己的设置.
这个评估值在这个问题中可以用此状态到正确状态的每个位置的曼哈顿距离来表示.
-
从最小限度到最大限度进行遍历, 此值作為当前dfs的限度值, 这个限度不断在有效范围内递增的过程就称作迭代加深
-
进行dfs, 调整状态, 将新状态加入到新的dfs中, 直到找到了一个解(由于迭代加罙, 此解为最优解). 进行回溯, 加入路径, 算法结束.
从上面的分析中可见, 即使是IDA*算法, 其局限性依然很大, 比如它需要设置一个最大限制, 而超出这个限淛的状态将无法求解出.
-
在这个IDA*算法中, 每个状态包含了以下信息.
- 当前状态距离正确状态的曼哈顿距离
-
所谓迭代, 就是一代一代更迭, 所以, 既然我們确定了最大范围(LIMIT), 那么我们就可以在这个范围里再设置范围限制, 然后搜索(dfs).
每当找到了一个解, 这个解就是最优解, 因为更优解在我们之前的搜索中没有出现.
-
答: 会绕圈, 但是不会有很大影响, 因为我们设置了搜索次数, 所以绕圈多消耗步骤的自然会淘汰掉.
十六15宫格拼图随机数据: 排列置乱算法