我正在尝试多种搜索算法来解决广义 AI 问题,其中之一是深度优先搜索。我已经将广度优先搜索、贪心搜索和 A* 搜索从它们的自然递归形式转换为迭代形式,但是在使用深度优先搜索时遇到了更多麻烦cleanly
(尽管这并不超出我的能力,我我不确定这样做的最pythonic方式,因此问题)。
即使是一些中型问题,我也遇到了 CPython 的 1000 次递归调用限制。后继状态是惰性生成的(_generate_states
是生成器,不是列表),并且需要从初始状态开始的路径。
从使用调用堆栈到显式堆栈的最 Pythonic 方式是什么?堆栈中应该存储多少信息?回溯时(当没有状态返回非空列表时),从堆栈前面弹出死信息的最佳方法是什么?
def dfs(initial, closed_set, goal, capacity):
if initial == goal:
return [initial]
for state in _generate_states(initial, capacity):
if state not in closed_set:
result = dfs(state, [initial] + closed_set, goal, capacity)
if result:
return [state] + result
return []