Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 树/图遍历:查找最大值路径_Java_Algorithm_Search_Graph_Tree - Fatal编程技术网

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

Java 树/图遍历:查找最大值路径,java,algorithm,search,graph,tree,Java,Algorithm,Search,Graph,Tree,我试图,给定一个具有整数值和N个级别的图G,将从根节点到叶节点的值求和。求这些路径值的最大和。子节点可以有多个父节点,这就是为什么它更像一个图而不是一个树 比如说, 我尝试通过BFS为一个小型Java小程序实现这个功能,但我不确定这是最好的方法。是否有其他建议使其与节点数量保持比例,即O(n)。我想不出任何方法可以扩展到O(n)。有什么想法吗?通过使用动态规划算法将底层节点的信息向上传播,您可以在线性时间内解决这个问题 这样想:如果图形只有一层,那么最佳答案必须是从该层获取最大值。另一方面,假

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

比如说,


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

通过使用动态规划算法将底层节点的信息向上传播,您可以在线性时间内解决这个问题

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

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


希望这有帮助

如果图具有上述金字塔形式,那么您可以将最大和从最深的节点传播到根节点。图是定向的吗?你能有循环吗?几乎是一棵树,除了允许多个父母的事实,但这在某些情况下不起作用,除非我弄错了。例如,如果第二层除了一个有1的层外,其他层都有0,会怎么样。但是从一个0节点来看,值100是1无法得到的。您的算法将沿着路径1向下移动,而沿着路径0向下移动将是最好的。@kpscript-我认为算法在这种情况下有效。您不会自上而下地计算算法(因为,正如您所看到的,它并不总是有效的),而是自下而上地计算。因此,在计算顶层中的值时,使用之前计算的值作为下层的值。这意味着,如果有一个0指向一个100,那么您应该已经预先计算出这个0实际上有值100。然后,当扫描顶层并查看下面的一层时,您会检测到这一点。这有意义吗?