algorithm - 回溯中是否有 do -> recurse -> undo 模式的名称?

标签 algorithm search naming backtracking tree-search

backtracking ,即用于解决 n 皇后问题的算法,基本上有两种方法可以进行递归调用:

  1. 复制父板做子板,修改子板放置新皇后,然后递归调用子板。
  2. 直接修改板子,递归调用,然后撤销修改。

第二种是首选,因为它避免了昂贵的复制。

这种选择也存在于其他算法中,例如游戏中的 minimax。

模式 2 是否有与模式 1 相对的名称?

最佳答案

在约束规划和 SAT 求解(您的 n 皇后示例通常来自哪里)中,我认为这些概念被描述为:

  • 基于副本
  • 基于追踪

例如:

Reischuk, Raphael M., et al. "Maintaining state in propagation solvers." International Conference on Principles and Practice of Constraint Programming. Springer, Berlin, Heidelberg, 2009.

Schulte, Christian. "Comparing Trailing and Copying for Constraint Programming." ICLP. Vol. 99. 1999.

前者摘录:

Constraint propagation solvers interleave propagation, removing impossible values from variable domains, with search. The solver state is modified during propagation. But search requires the solver to return to a previous state. Hence a propagation solver must determine how to maintain state during propagation and forward and backward search. [...] This paper also provides the first realistic comparison of trailing versus copying for state restoration.

两者各有优缺点,在引用文献中进行了分析。

请记住,线索通常不仅是关于存储您的决定(棋盘布局),而且还发生了传播(由于alldifferent<,此布局导致了这些现在不可能的布局/em> 传播:这些影响也必须恢复!)。有关此类实现的概述,请参阅:MiniCP

关于algorithm - 回溯中是否有 do -> recurse -> undo 模式的名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68547867/

相关文章:

Python素和程序

c# - gridview 列的总和,跳过重复项

php - 正在设计 "relevance-based"搜索吗?

search - 用于 Intranet 文档搜索引擎的基于 Web 的免费解决方案?

c# - 使用 LINQ 优化二维数组的搜索

algorithm - 查找四叉树中最近的相邻边

c# - 从文本文件命名变量

postgresql - 迁移到 Hibernate 5.2 后出现缺少表错误

python - 在列表中查找元素索引的最快方法