Algorithm 如何在无权一般图的所有简单路径中找到最长的增长子序列?
设G=(V,E)是一个无权一般图,其中每个顶点V都有权w(V) G中简单路径p的递增子序列是一个p的顶点序列,其中沿该序列的所有顶点的权重都增加。简单路径可以是闭合路径 简单路径p的最长递增子序列(LIS)是具有最大顶点数的p的递增子序列 问题是,如何在G的所有简单路径中找到最长的递增子序列Algorithm 如何在无权一般图的所有简单路径中找到最长的增长子序列?,algorithm,graph,dynamic-programming,lis,Algorithm,Graph,Dynamic Programming,Lis,设G=(V,E)是一个无权一般图,其中每个顶点V都有权w(V) G中简单路径p的递增子序列是一个p的顶点序列,其中沿该序列的所有顶点的权重都增加。简单路径可以是闭合路径 简单路径p的最长递增子序列(LIS)是具有最大顶点数的p的递增子序列 问题是,如何在G的所有简单路径中找到最长的递增子序列 请注意,图是无向的,因此它不是有向无环图(DAG)。这里有一个非常快速的算法来解决这个问题。图中最长的递增子序列是图中路径的子序列,每条路径必须完全属于单个连接组件。因此,如果我们可以在连接的组件上解决这个
请注意,图是无向的,因此它不是有向无环图(DAG)。这里有一个非常快速的算法来解决这个问题。图中最长的递增子序列是图中路径的子序列,每条路径必须完全属于单个连接组件。因此,如果我们可以在连接的组件上解决这个问题,我们可以通过在所有连接的组件上找到最佳解决方案来解决整个图的问题 接下来,考虑一个例子,你正在解决一个连通图G的这个问题。在这种情况下,你能找到的最长的递增子序列是通过按节点的权重排序,然后从最小权重节点遍历到第二个,然后遍历到第三个,然后遍历到第四个,等等。如果有任何关联或重复,你可以跳过它们。换句话说,你可以通过
我最初发布了这个答案,因为我觉得它很有趣,所以我将其保留: 假设您从图G中选择了一条简单的路径,并查看该路径的最长递增子序列。尽管路径遍历整个图,并且可能有许多中间节点,但该路径的最长递增子序列实际上只关心
- 路径上的第一个节点也是LIS的一部分
- 从该点开始,路径中的下一个最大值
- 在G中有一条从u到v的路径
- w(u)