Algorithm 算法-计算两个DAG的最长公共子序列(LCS)

Algorithm 算法-计算两个DAG的最长公共子序列(LCS),algorithm,graph,dynamic-programming,lcs,Algorithm,Graph,Dynamic Programming,Lcs,我有两个有向无环图,我需要计算这些图的最长公共子序列(LCS)。对于两个字符串/子序列,我使用使用动态规划(DP)的LCS算法,但如何将该算法修改为图形 有什么想法吗 整个任务: 设G是一个有向无环图,其中每个顶点用有限字母表中的一个符号标记。不同的顶点可以用相同的符号标记。G中的每个有向路径都有一个通过连接路径顶点符号而形成的轨迹序列是G中某条有向路径的迹的子序列 设计了一种计算给定两个有向无环图的最长公共序列的有效算法 示例:字符串DYNAMIC、PROGRAM和DEPTHFIRST是图片的

我有两个有向无环图,我需要计算这些图的最长公共子序列(LCS)。对于两个字符串/子序列,我使用使用动态规划(DP)的LCS算法,但如何将该算法修改为图形

有什么想法吗

整个任务:

设G是一个有向无环图,其中每个顶点用有限字母表中的一个符号标记。不同的顶点可以用相同的符号标记。G中的每个有向路径都有一个通过连接路径顶点符号而形成的轨迹<图G的strong>序列是G中某条有向路径的迹的子序列

设计了一种计算给定两个有向无环图的最长公共序列的有效算法

示例:字符串DYNAMIC、PROGRAM和DEPTHFIRST是图片的有向非循环图序列。字符串程序是它的跟踪


设A为第一个DAG,B为第二个DAG。对于a中的任意两个节点a和b中的任意两个节点b,定义从a中的a和b中的b开始的最长公共子序列的长度

LCS(a,b) =  0 + max LCS(a',b') for any pair (a',b') s.t. a->a' and b->b'
                               or a=a' and b->b', or b=b' and a->a'
                               if a and b do NOT share same label

            1 + max LCS(a',b') for any pair (a',b')
                               s.t. a -> a' and b -> b'
                               if a and b DO share same label

然后在| A | x | B |对(A,B)上应用动态规划,并读取与DAG源(“起始节点”)相关的对的值。

您无法证明任何类型的研究工作。此外,这似乎是另一个被删除的问题的复述:我试图搜索信息、练习,。。。但我不知道如何修改LCS算法。因此,一些提示可能会有所帮助,而不是这些注释……考虑节点对(x,y)的隐式图,其中x是第一个DAG的节点,y是第二个DAG的节点。添加边(A(x),y)、(x,A(y))和(A(x),A(y)),其中A是邻接列表。指定边权重,使此图中的最长路径对应于LCS,就像字符串一样。然后解决最长路径问题。我认为如果a和b不共享同一标签,LCS(a,b)应该是0。你在a(a1)D->(a2)a->(a3)B和(b1)D->(b2)C->(b3)a->(b4)B图中写LCS(a2,b2)的方式是0+LCS(a2,b3)=1+LCS(a3,b3)=2。那么LCS(a1,b1)将是1+LCS(a2,b2)=3,这是错误的。