反向跟踪设计技术的通用定义

时间:2012-05-04 04:46:16

标签: algorithm backtracking

我正在阅读Anany Levtin的算法设计和分析导论中的跟踪算法设计技术。

我很难理解反向跟踪算法的通用定义,并将其映射到4皇后问题。

  

对于反向跟踪算法设计技术来说比较一般   透视,大多数回溯算法符合以下要求   描述

     

回溯算法的输出可以被认为是n元组   (x1,x2,x3,...,xn)其中每个坐标xi是一些元素   有限线性有序集Si。例如,对于n-queens   问题是,每个Si是整数1到n的集合。元组可能   需要满足一些额外的约束(例如,非攻击   在n女王问题上的要求)。

     

例如对于4个大写问题,每个Si设置为{1,2,3,4}

     

反向跟踪算法明确地或明确地生成,a   状态空间树,其节点表示部分构造的元组   第一个“i”坐标由前面的动作定义   算法。如果这样的元组(x1,x2,x3,... xi)不是解决方案,那么   算法找到Si + 1中与...一致的下一个元素   值(x1,x2,x3 ...... xi)和问题约束并加上它   将元组作为其(i + 1)st坐标。如果这样的元素没有   存在,算法回溯考虑xi的下一个值,和   等等。

我对上述文字的疑问是

  1. 作者的意思是“反向跟踪算法明确地或明确地生成状态空间树,其节点用第一个”i“表示部分构造的元组 由算法的早期动作定义的坐标。如果这样的元组(x1,x2,x3,... xi)不是解决方案,算法会找到下一个元素 在Si + 1中,它与(x1,x2,x3 ... xi)的值和问题约束一致,并将其作为其(i + 1)st坐标添加到元组中。“?

    具体来说,算法的意思是算法在Si + 1中找到下一个元素?

    请向4女王问题解释上述陈述。

  2. 如果元素不存在,算法会回溯到xi的下一个值?请用4皇后问题解释这个问题。

  3. 谢谢!

1 个答案:

答案 0 :(得分:0)

这种回溯的解释确实难以理解,因为它使用了很多正式的符号,不用于特定目的或证明。让我试着以一种不太正式的方式解释它与4皇后问题,这是一个很好的例子:

在回溯过程开始时,董事会是空的。这是状态空间树的根。这个根有子节点,每个可能放一个女王的可能性。我们不是在进入下一级别之前构造每个子节点(这将导致状态空间树的BFS),而是为第一个皇后选择一个可能的位置,从而构造一个子节点。从这个子节点我们再次有多个选项来放置第二个皇后,所以我们选择一个,依此类推。

如果我们到达我们无法放置剩余女王的节点,我们会回溯 - 我们向该节点父节点上升一级并检查是否还有可能还没有探索。如果是,我们通过创建相应的子节点来探索它们,如果没有我们再次回溯,则上升到另一个级别,直到我们找到问题的解决方案(所有皇后都被放置)或者我们扩展根节点的所有子节点并且到达回溯操作期间的根节点 - 这意味着没有解决方案。