树/图遍历:查找最大值路径

时间:2013-03-21 23:16:47

标签: java algorithm search graph tree

我试图在给定具有整数值和N个级别的图G的情况下,将从根到叶节点的值相加。找到这些路径值的最大总和。子节点可以有多个父节点,这就是为什么它更像是一个图而不是树。

例如,

enter image description here

我尝试通过BFS实现这个小型Java小程序,但我不确定这是最好的方法。是否存在其他建议以使其与节点数量保持一致,即O(n)。我想不出任何可以扩展到O(n)的方法。有什么想法吗?

1 个答案:

答案 0 :(得分:4)

您可以使用动态编程算法在线性时间内解决此问题,从而向上传播来自底层节点的信息。

以这种方式思考:如果图形只有一层,那么最佳答案必须是从该层获取最大值。另一方面,假设图形具有n + 1层并假设您(递归地)计算了最底层n层的最优解。在这种情况下,您可以通过查看顶层并为每个条目计算该条目的总和以及其任何直接子项(您已经预先计算过的)的最佳解决方案来找到最佳解决方案。然后,所有这些中的最大值将为您提供总体最大值。

这种方法最终只访问每个边缘一次,因此总运行时最终为O(n + m),其中n是节点数,m是边数。

希望这有帮助!