通过对回溯策略的学习后,可以看出求解过程种呈现出递归过程的性质,因此用递归算法描述回溯控制下的产生式系统能抓住特点,简单有效。 实现回溯策略的有效方式是应用的递归过程去支持搜索和回溯令PATH、SNL、n、n' 为局部变量: PATH--节点列表,指示解答路径; SNL--当前节点扩展出的子节点列表; MOVE-FIRST(SNL)--把SNL表首的节点移出,作为下一次要加以扩展的节点; n、n'--分别指示当前考察和下一次考察的节点。 该递归过程的算法就取名为BACKTRACK(n),参数n为当前被扩展的节点,算法的初次调用式是BACKTRACK(s),s即为初始状态节点。 算法的步骤如下:
该递归回溯算法中,失败状态通常意指三种情况:
失败状态实际上定义了搜索过程回溯的条件;另一种回溯条件是搜索进入"死胡同",由该算法的第4句定义。 由于回溯是递归算法,解答路径的生成是从算法到达目标状态后逆向进行的,首先产生空表,然后每回到算法的上一次调用就在表首加入节点n',直到顶层调用返回不包含初始状态节点s的解答路径。 影响回溯算法效率的关键因素是回溯次数。鉴于回溯是搜索到失败状态时的一种弥补行为,只要能准确地选择下一步搜索考察的节点,就能大幅度减少甚至避免回溯。所以,设计好的启发式函数h(n)是至关重要的。 |
