Algorithm 深度优先搜索基础知识

Algorithm 深度优先搜索基础知识,algorithm,tree,depth-first-search,Algorithm,Tree,Depth First Search,我正在尝试改进我目前针对8皇后问题的算法,这是我第一次真正处理算法设计/算法。我想实现深度优先搜索,并结合此处描述的不同Y值的排列: 我已经实现了置换部分来解决这个问题,但是我在思考深度优先搜索时遇到了一些困难。它被描述为一种遍历树/图的方法,但它是否生成树/图?只有在深度优先搜索生成要遍历的树结构的情况下,通过实现一些逻辑来只生成树的某些部分,这种方法才能更有效 所以本质上,我必须创建一个算法,生成一个经过修剪的词汇排列树。我知道如何实现剪枝逻辑,但我不确定如何将其与置换生成器绑定,因为我一

我正在尝试改进我目前针对8皇后问题的算法,这是我第一次真正处理算法设计/算法。我想实现深度优先搜索,并结合此处描述的不同Y值的排列:

我已经实现了置换部分来解决这个问题,但是我在思考深度优先搜索时遇到了一些困难。它被描述为一种遍历树/图的方法,但它是否生成树/图?只有在深度优先搜索生成要遍历的树结构的情况下,通过实现一些逻辑来只生成树的某些部分,这种方法才能更有效

所以本质上,我必须创建一个算法,生成一个经过修剪的词汇排列树。我知道如何实现剪枝逻辑,但我不确定如何将其与置换生成器绑定,因为我一直在使用next_置换


是否有任何资源可以帮助我了解深度优先搜索的基础知识或创建树形的词汇排列?

一般来说,是的,深度优先搜索的思想是您不必生成(或“访问”或“扩展”)每个节点

在八皇后问题中,如果你放置一个皇后,使它可以攻击另一个皇后,你可以中止该分支;它不能导致解决办法

如果你要解决八个皇后的一个变体,你的目标是找到一个解决方案,而不是全部92个,那么一旦找到一个,你就可以退出

更一般地说,如果您正在解决一个不太离散的问题,比如根据某种度量找到皇后的“最佳”排列,那么您可以在知道分支不会导致比您在另一个分支上已经找到的最终状态更好的最终状态时,立即中止该分支。这是与环境有关的


更一般地说,如果你正在攻克一个非常大的问题(如国际象棋),你可能会对一个不精确的解决方案感到满意,因此你可以中止一个可能无法找到你已经找到的解决方案的分支。

一般来说,是的,深度优先搜索的思想是你不必生成(或“访问”或“扩展”)每个节点

在八皇后问题中,如果你放置一个皇后,使它可以攻击另一个皇后,你可以中止该分支;它不能导致解决办法

如果你要解决八个皇后的一个变体,你的目标是找到一个解决方案,而不是全部92个,那么一旦找到一个,你就可以退出

更一般地说,如果您正在解决一个不太离散的问题,比如根据某种度量找到皇后的“最佳”排列,那么您可以在知道分支不会导致比您在另一个分支上已经找到的最终状态更好的最终状态时,立即中止该分支。这是与环境有关的


更一般地说,如果您正在攻击一个非常大的问题(如国际象棋),您可能会对一个不精确的解决方案感到满意,因此您可以中止一个可能无法导致您已经找到的解决方案的分支。

DFS算法本身不会生成树/图。如果您想要构建树和图形,那么构建它和执行搜索一样简单。如果您只想找到一个soution,一个简单的后进先出数据结构(如链表)就足够了:当您访问一个新节点时,将其附加到列表中。当您在搜索中将某个节点留作回溯时,请关闭该节点。

DFS算法本身不会生成树/图。如果您想要构建树和图形,那么构建它和执行搜索一样简单。如果您只想找到一个soution,一个简单的后进先出数据结构(如链表)就足够了:当您访问一个新节点时,将其附加到列表中。当您在搜索过程中让一个节点返回时,请关闭该节点。

anany levitan的一本名为《算法简介》的书对您的理解进行了适当的解释。他还提供了8皇后问题的解决方案,就像你描述它的方式一样。这肯定会对你有帮助

据我所知,要找到一个解决方案,你不需要任何排列,你所需要的只是dfs。这就足够找到解决方案了。

阿纳尼·莱维坦(anany levitan)的《算法导论》一书对你的理解作了适当的解释。他还提供了8皇后问题的解决方案,就像你描述它的方式一样。这肯定会对你有帮助

据我所知,要找到一个解决方案,你不需要任何排列,你所需要的只是dfs。这就足够找到解决方案了