回溯与蛮力搜索的区别

我目前正在学习算法课程,对蛮力搜索和回溯的具体定义有些困惑。我的理解如下:

  • 蛮力搜索BFS)是一种算法类型,它计算出问题的每一个可能解,然后选择一个满足要求的解。
  • 显式约束给出了每个选择的可能值(例如,选择1-3限于{1, 2},选择4限于{3, 4, 5}等),这决定了搜索的“执行树”的形状。
  • 隐式约束将不同的选择相互关联(例如,选择2必须大于选择1等),在BFS中用于移除潜在的解。
  • 回溯是BFS的扩展,其中隐式约束在每次选择后立即评估(而不是在所有解生成后),这意味着潜在的解可以在完成前被丢弃。

基本上,我只是想知道这些是否准确,如果不准确,我非常希望得到一些澄清。提前感谢。


回答:

简短回答:如果我正确理解了问题,你是正确的

正如你所说,显式约束是对每个变量的的约束,所以xi∈Si。请注意,Si不必作为集合来陈述。例如,你可以声明S0是小于25的所有素数的集合。

另一方面,隐式约束是定义在两个或更多变量上的谓词P(x1,x2,…,xn)。例如x2<x3。但它也可以定义在更多变量上(例如三个)。

蛮力搜索只考虑显式约束:它为变量xi分配来自Si的所有可能值,并且对所有变量都这样做。在构建这样的配置后,它验证所有隐式约束是否满足

回溯则旨在优化这一过程。从定义了隐式约束的所有变量被分配的那一刻起,它验证该约束。如果约束失败,则立即为其中一个变量分配不同的值。优点是,例如,如果蛮力搜索为x1=2分配了2,为x2=5分配了5,并且隐式约束x1 > x2失败,那么它不会为x3,x4,…分配值,只为了发现这些值的所有配置都失败。

当然,回溯涉及一些记录工作:你需要找出当某个值被设置时哪些约束会“触发”。但对于许多约束编程问题(如SAT),存在高效的算法来做到这一点(使用监视字面量等)。此外,像Gecode这样的约束编程库还具有高级排队机制,以便首先评估快速约束等。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注