【问题标题】:Backtracking Search Algorithms回溯搜索算法
【发布时间】:2013-07-20 12:05:01
【问题描述】:

我真正的问题是,“为什么回溯不能加快我的搜索速度?”但如果没有更多上下文,我不确定这是否有意义......

这个问题实际上只是学术问题 - 代码“有效”,我的程序找到了我期望的解决方案....但我想确保我理解术语。为了帮助说明问题,让我们使用一个需要搜索算法的具体示例 - n-Queens 问题。

n-queens problem - 将 n 个皇后放在 n×n 棋盘上,这样任何皇后都无法攻击另一个。

一个解决方案

互联网上有很多示例代码可以在搜索“N-queens backtracking”时找到,维基百科关于回溯的文章甚至在解释什么是回溯时使用了 N-Queens (http://en.wikipedia.org/wiki/Backtracking)。据我了解,这个想法是,给定一个无效的棋盘配置 - 假设两个可以互相攻击的皇后,该算法会忽略所有通过添加额外棋子而产生的棋盘配置。

我还实现了我的搜索的(非递归/非回溯)深度优先和广度优先版本。正如预期的那样,两种变体都测试了完全相同数量的状态。我希望使用回溯算法的递归深度优先应该测试更少的状态。但我没有看到。

Depth First
    Found 92 solutions in 10.04 seconds
    Tested 118969 nodes (1.2k nodes per second)
    Largest Memory Set was 64 nodes
BackTracking
    Found 92 solutions in 9.89 seconds
    Tested 118969 nodes (1.2k nodes per second)
    Largest Memory Set was 170 nodes
Breadth First
    Found 92 solutions in 12.52 seconds
    Tested 118969 nodes (0.95k nodes per second)
    Largest Memory Set was 49415 nodes 

我的实际实现是通用的,所以我没有利用板镜/旋转或其他任何聪明的东西。

我觉得我一定是误解了,但我没有看到回溯给我带来什么好处?

维基百科解释说,一旦发现给定状态无效,它的子树就会被跳过(修剪),但合理地放置皇后(避免 a8 中的 Q1 和 a7 中的 Q2)似乎可以防止任何可以修剪的情况?

我的呼吸优先实施应该考虑哪些板配置可以避免回溯?

【问题讨论】:

  • 您确定您的深度优先搜索还不是回溯算法吗? (回溯不需要递归。)
  • @user2357112 绝对正确;这是一个奇怪的问题;你说你已经实现了“没有回溯”的深度优先和广度优先解决方案,但是深度优先和广度优先是回溯策略,所以这对我来说没有任何意义。

标签: c# python algorithm search


【解决方案1】:

回溯是避免搜索不良路径的几种方法之一。启发式方法,例如“合理地”放置皇后是另一回事。您的非回溯解决方案必须具有足够好的启发式方法以避免搜索所有无效路径。一个完全不修剪的解决方案将测试棋盘上的每一个(64 选 8)皇后排列。

【讨论】:

    【解决方案2】:

    原版回溯与深度优先搜索是一回事。你在你的分支上越来越深,当你不能继续前进时(因为没有更多的皇后可以放在板上)你跟踪你的路径向后到根,并尝试树的其他分支 --- 因此“回溯”。

    您的深度优先搜索和“回溯搜索”可能是相同的算法,只是外观不同。当您在棋盘上有 6 个皇后并且没有更多皇后适合那里时,您无法“理性地”继续搜索,因此您的深度优先搜索可能无论如何都会停止(而不是枚举您从添加 7th 获得的所有无效配置)和棋盘上任意位置的第 8 个皇后)。

    【讨论】:

      【解决方案3】:

      维基百科对回溯的描述将 (i) 重新访问节点以考虑未访问的分支和 (ii) 修剪节点,例如,通过强制执行 local consistency 的算法。如果您不这样做 (ii),那么访问的节点数不会减少。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-24
        • 1970-01-01
        • 2018-04-21
        • 1970-01-01
        • 2021-11-29
        相关资源
        最近更新 更多