algorithm - A* 与最长路径中的树

标签 algorithm tree a-star

令 T 为一棵树,其中每个节点代表一个状态。根代表初始状态。从父级到子级的边指定可以在父级上执行的操作,以更改状态(新状态将是子级)。每条边都与一个增益相关联,即,我通过从父状态转换到子状态来获得一些东西。

此外,假设从根到叶节点的每条路径的长度为Q。

我的目标是找到长度为 Q 的最有希望的路径,即保证最大增益的路径(其中路径增益定义为路径中边缘的增益之和)。

显然,我想在不探索整个树的情况下执行此操作,因为 T 可能非常大。

因此,我想到了申请A*。我知道 A* 可用于查找图中的最短路径,但是:

  • 我没有成本,我有收获
  • 我想找到最长的路径(实际上不是距起始节点距离最长的路径,而是权重相加后给出最高值的路径)
  • 我有一个树,而不是一个图(没有循环!)

最终,我想向您提出一系列问题:

  1. A* 适合解决此类问题吗?我能通过应用找到最佳解决方案吗?
  2. 由于 A* 需要在最短路径的情况下使用从当前节点到目标的成本(低估)估计,我是否需要寻找从当前节点到目标的增益(高估)目标并将其用作启发式?
  3. 给定 T 中的节点 n,我的想法是将启发式 h(n) 计算为 n 的子节点所获得的增益的总和,这可能不是那么严格。您认为还有更好的解决方案吗?

编辑:给定树中的节点 n,附加到从 n 发出的边的增益不能大于数量 U(n)。而且,随着n深度的增加,U(n)变得越来越小。

最佳答案

分析

原因如下。假设您断言路径 P 是最佳路径,并且尚未检查边 e。在不失一般性的情况下,我可以将 e 的增益设置为大于树中所有其他增益之和的值。那么您的路径P不是最佳。

因此,在检查所有边的增益之前做出的任何最优性断言都是错误的。

结论

如果没有给出有关边缘增益的附加信息,如果不探索整个树,就无法找到最佳路径

例如,如果您有增益值的上限,则可以使用 A* 更有效地找到最佳路径,而不是检查每条边。


在写完此答案后,您对问题所做的更改的回复位于下面的评论中。请务必查看它们。

关于algorithm - A* 与最长路径中的树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17092742/

相关文章:

python - 如何为 SciPy fmin_l_bfgs_b 创建伪函数和函数素数?

algorithm - 求解 Nonograms 的进化算法

tree - 检查 Common Lisp 中的 n 叉树是否平衡

具有可排序功能的 jQuery TreeView

perl - 在perl中解析树数据文件

java - 我的 A* 寻路实现有问题吗?

python - 了解单目标迷宫的 A* 启发式算法

java - 编程问题 - 传真压缩

algorithm - 使用任意数据点计算总时间跨度

c# - 维基百科 A* 寻路算法需要大量时间