Algorithm 最长递增子序列是DAG中最长路径的特例吗?

Algorithm 最长递增子序列是DAG中最长路径的特例吗?,algorithm,graph,directed-acyclic-graphs,Algorithm,Graph,Directed Acyclic Graphs,我在《搭便车者算法指南》中读到了这句话。但是,我不能把它想象成一个LIS问题,我们只有一个数字序列。如何将其调整为图形问题?想象一下二维网格的问题。你在左下角,你需要到达右上角。你能想象这个计划会产生一个非循环的DAG吗 现在想象一些广场是被禁止的。禁止使用方块可能会导致“锁定”(你可能会发现自己被困住),现在选择要遵循的路径实际上很重要。 在图形方面,您可以将禁止正方形视为删除顶点,您的目标是从根节点转到一个特定节点(汇节点) 现在让我们回到LIS。在解决LIS问题时,您实际需要做的是决定选择

我在《搭便车者算法指南》中读到了这句话。但是,我不能把它想象成一个LIS问题,我们只有一个数字序列。如何将其调整为图形问题?

想象一下二维网格的问题。你在左下角,你需要到达右上角。你能想象这个计划会产生一个非循环的DAG吗

现在想象一些广场是被禁止的。禁止使用方块可能会导致“锁定”(你可能会发现自己被困住),现在选择要遵循的路径实际上很重要。 在图形方面,您可以将禁止正方形视为删除顶点,您的目标是从根节点转到一个特定节点(汇节点)

现在让我们回到LIS。在解决LIS问题时,您实际需要做的是决定选择哪些数字,哪些不选择。限制是,无论何时选择一个数字,都不能选择小于此数字的任何数字(按顺序选择数字)

现在我们可以混合这两种东西了。想象一下,您将用数字序列构建一个图形:

  • 每个数字都将是一个节点
  • 编号节点A与编号节点B之间有一条边
    • 在序列中,B在A之后
    • B的值大于A
  • 有一个特殊的节点end
  • 每个节点都有一条到结束的边

此图上的每条路径都是有效的递增子序列。如果我们有一个数字数组,比如说1,5,4,8,那么查找LIS的问题就是在这个图上查找最长路径的问题。我们可以像下面这样构造一个DAG

  • 将每个数字添加为顶点
  • 对于每个数字顶点,将权重为1的输出边添加到其后面的所有较大数字中
  • 将具有权重为0的输出边的节点S添加到所有数量的顶点
  • 添加一个节点E,该节点具有来自所有顶点的权重为0的传入边
因此,最长增长子序列问题变成了从S到E的最长路径问题


解释得很好。非常感谢。:)1->4是否也应该有优势?