我正在阅读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的下一个值,和 等等。
我对上述文字的疑问是
作者的意思是“反向跟踪算法明确地或明确地生成状态空间树,其节点用第一个”i“表示部分构造的元组 由算法的早期动作定义的坐标。如果这样的元组(x1,x2,x3,... xi)不是解决方案,算法会找到下一个元素 在Si + 1中,它与(x1,x2,x3 ... xi)的值和问题约束一致,并将其作为其(i + 1)st坐标添加到元组中。“?
具体来说,算法的意思是算法在Si + 1中找到下一个元素?
请向4女王问题解释上述陈述。
如果元素不存在,算法会回溯到xi的下一个值?请用4皇后问题解释这个问题。
谢谢!
答案 0 :(得分:0)
这种回溯的解释确实难以理解,因为它使用了很多正式的符号,不用于特定目的或证明。让我试着以一种不太正式的方式解释它与4皇后问题,这是一个很好的例子:
在回溯过程开始时,董事会是空的。这是状态空间树的根。这个根有子节点,每个可能放一个女王的可能性。我们不是在进入下一级别之前构造每个子节点(这将导致状态空间树的BFS),而是为第一个皇后选择一个可能的位置,从而构造一个子节点。从这个子节点我们再次有多个选项来放置第二个皇后,所以我们选择一个,依此类推。
如果我们到达我们无法放置剩余女王的节点,我们会回溯 - 我们向该节点父节点上升一级并检查是否还有可能还没有探索。如果是,我们通过创建相应的子节点来探索它们,如果没有我们再次回溯,则上升到另一个级别,直到我们找到问题的解决方案(所有皇后都被放置)或者我们扩展根节点的所有子节点并且到达回溯操作期间的根节点 - 这意味着没有解决方案。