【发布时间】:2016-05-12 18:16:47
【问题描述】:
如果我没有使用正确的术语或忽略了现有的解决方案,请原谅我。我在搜索算法及其背后的理论方面没有经验。我只是想解决一个问题。
我之前曾使用我被告知的 A* 算法来解决不同的问题。但仔细阅读后,我意识到我所学到的并不是完全维基百科告诉我的。
我学到的是:
- 从您的源节点开始
- 为您可以采取的每条路径打开一个新的解决方案
- 为您可以从那里采取的每条路径递归地创建一个新的子解决方案
- 当您使用多种解决方案到达同一个地方时,放弃那些花费比最快解决方案更长的人
现在,如果我正确理解维基百科,这就是我应该做的:
- 从您的源节点开始
- 为您可以采取的每条路径打开一个新的解决方案
- 按“路径成本”+“目标估计成本”对解决方案进行排序
- 采用最便宜的解决方案并为每个可能的路径创建子解决方案
- 将这些溶液依次放入其他溶液中,然后重复冲洗
我可以看到这将如何帮助不计算那么多解决方案,但我的问题是我看不到创建“乐观”估计的可能性。
我不是在地图上寻找路径。我正在尝试找到最佳的操作顺序。有一个最小的序列——比如说——ABCDEFGH。您不能在 E 之前执行 F,但以特定顺序重复先前的操作可能会使以后的操作更有效率。
我需要不同的搜索算法吗?我是否按照我最初所学的去做,只是接受这样一个事实,即做更多的工作是没有好的启发式函数的代价?
我相信我的老师已经意识到了这个问题。我学到的只是 A*,启发式函数 f(n) = 0。
【问题讨论】:
-
没有可接受启发式的 A* 基本上是 BFS,在最坏的情况下它将探索所有可能的状态。会找到解决方案,但最坏的情况仍然是蛮力。