【问题标题】:Can 15 puzzle really be solved by backtracking? [closed]15个谜题真的可以通过回溯解决吗? [关闭]
【发布时间】:2013-06-07 12:25:07
【问题描述】:

最近我在读一本名为《编程挑战》的书。它基本上是一本关于算法的书。本书的其中一章专门讨论回溯技术,在本章末尾有来自 UVA Online Judge 的示例问题。问题之一是著名的15 puzzle

尽管在专门讨论回溯的章节中介绍了这个问题,但我非常怀疑这个问题是否可以在给定的时间限制内通过回溯来解决。

我的问题是:这里有没有人设法通过仅包含回溯的解决方案获得 UVA 在线法官接受?我的意思是你收到了一个接受,没有花哨的 A* 算法,也没有使用动态编程中的记忆,或者需要一些聪明的递归的一些花哨的解决方案。我的意思是回溯。有可能吗?

【问题讨论】:

  • 我认为记忆是解决方案中相当重要的一部分......
  • 您的问题是将回溯作为解决此问题的可行解决方案还是一般问题?

标签: algorithm data-structures dynamic-programming backtracking


【解决方案1】:

15 谜题就像国际象棋或魔方一样,是一个需要搜索可能性树的 NP 难题。这种问题只能通过蛮力加剪枝来解决,也就是回溯。我同意你的观点,很难在短时间内解决这个问题,因为你可能必须使用某种启发式方法才能在合理的时间内解决它。另外,你是对的,必须使用一些额外的逻辑,因为你必须记住以前访问过的位置,否则你可能会永远搜索,一遍又一遍地重复相同的位置。

【讨论】:

  • “这种问题只能通过蛮力解决”维基百科上关于A*的文章说A*也可以用来解决15-puzzle。
  • A* 是一种可用于树的图搜索算法,因为树是一种图。 A* 不是 15 的合适算法,因为没有明显的工作成本函数。当在 15 上使用 A* 而没有有用的成本函数时,它与回溯没有什么不同。
【解决方案2】:

我想我今天很幸运,我在 youtube 上找到了写这本书的人的一系列讲座。其中一堂课是关于回溯部分的问题。 Here is the video。他实际上表明这是一个回溯问题,只是需要一些巧妙的修剪。

【讨论】:

  • 如果有人想跳过,相关位从 10:30 开始。
猜你喜欢
  • 1970-01-01
  • 2019-08-21
  • 1970-01-01
  • 2021-01-17
  • 1970-01-01
  • 2020-07-04
  • 1970-01-01
  • 1970-01-01
  • 2021-09-07
相关资源
最近更新 更多