我现在真的陷入困境,我疯了。
用最简单的术语来说,什么时候停止使用深度优先搜索的打开和关闭列表?
您是否打开并关闭每个节点,直到没有剩余节点?
请帮忙,因为我在这里很努力
谢谢
答案 0 :(得分:5)
打开列表可帮助您在深度优先和广度优先搜索中正确遍历树。逐步考虑算法。您所在的节点中有许多孩子,并且您将扩展其中一个孩子。扩展后应该有一个机制来回来并继续你的遍历。打开列表为您执行该操作,并告诉您实际上要扩展的下一个节点是什么。并且该算法仅阐明了子列入列表的顺序。
封闭列表通常可以提高算法的速度。它可以防止算法扩展预访问的节点。也许你到达之前通过另一个分支扩展的节点A
。这将让你剪切这个分支并尝试另一条路径。
启发式方法对于摆脱死胡同非常有用。在AI算法中,通常您遇到的问题是它们有许多废弃的分支。通过遍历每个步骤,您可以将路径成本添加到变量,并且当您要将扩展节点添加到打开列表时,考虑它将帮助您永远不会通过它们。否则,您将进入陷阱并且算法挂起。
让我用一个例子解释一下: 考虑游戏15-puzzles。您将通过算法解决它,您必须检查所有可能的方法。 (实际上你要做一棵树)。当您沿着树中可能的方向移动图块以在下一级别向相反方向移动时,对吗?所以你永远不会摆脱这样的死胡同而你的算法会挂起。
这是对开放和封闭列表的解释。您询问算法何时完成。实际上,您将重复展开并添加到打开列表,直到找到目标或打开列表为空。