Graph 如何在具有一组起始点和目标点的图中找到最长路径?

Graph 如何在具有一组起始点和目标点的图中找到最长路径?,graph,computer-science,path-finding,directed-acyclic-graphs,Graph,Computer Science,Path Finding,Directed Acyclic Graphs,我有一个DAG(每边的成本/权重),希望找到两组节点之间的最长路径。这两组起始节点和目标节点是不相交的,与图中的节点总数相比,它们的大小较小 我知道如何在一个起始节点和目标节点之间高效地执行此操作。使用multiple,我可以列出从每个起点到每个目标节点的所有路径,并选择最长的路径——但这需要二次数量的单路径搜索。有更好的方法吗?我假设您想要的是从第一个集合中的任何节点开始并在第二个集合中的任何节点结束的最长路径。然后,您可以添加两个虚拟节点: 第一个节点没有前导节点,其后继节点是第一个集合中

我有一个DAG(每边的成本/权重),希望找到两组节点之间的最长路径。这两组起始节点和目标节点是不相交的,与图中的节点总数相比,它们的大小较小


我知道如何在一个起始节点和目标节点之间高效地执行此操作。使用multiple,我可以列出从每个起点到每个目标节点的所有路径,并选择最长的路径——但这需要二次数量的单路径搜索。有更好的方法吗?

我假设您想要的是从第一个集合中的任何节点开始并在第二个集合中的任何节点结束的最长路径。然后,您可以添加两个虚拟节点:

  • 第一个节点没有前导节点,其后继节点是第一个集合中的节点

  • 第二个节点没有后继节点,其前继节点是第二个集合中的节点

所有新添加的边应具有零权重

图形仍然是一个DAG。现在,如果使用标准算法在两个新节点之间的DAG中查找最长路径,将获得从第一个集合开始到第二个集合结束的最长路径,除了在开始处有一条额外的零加权边,在结束处有一条额外的零加权边


顺便说一句,这个解决方案实际上是从第一个集合的所有节点执行算法,但与您的问题所建议的顺序方法相反,它是并行的。

这可能会有用。[DAG中的最长路径][1][1]:我希望我没有过早接受答案,因为直觉上这很有道理,而且非常简单!另一方面,我仍然想用暴力解决方案来测试它。但就我所知,这完全可行!谢谢如果我的解决方案确实有效,那么唯一可能出现问题的就是性能。拓扑排序在图的大小(节点+边)上花费线性时间,因此添加的两个节点和几条边几乎没有区别。如果一个节点位于起始节点和结束节点之间的路径上,我的算法会对其进行一次处理,蛮力算法会对它所处的每对起始节点和结束节点进行一次处理。此外,我的解决方案只需要初始化和后处理一次,而蛮力算法需要为每一对获取实际候选的最长路径,以避免极端的内存消耗。