Algorithm 是否有任何算法可以解决每个字符具有不同权重的最长常见后续问题?

Algorithm 是否有任何算法可以解决每个字符具有不同权重的最长常见后续问题?,algorithm,dynamic-programming,lcs,Algorithm,Dynamic Programming,Lcs,我正在寻找一种算法,该算法可以解决具有以下条件的两个字符串的LCS问题: 每个字符串由英文字符组成,每个字符都有一个权重。例如: 序列1(S1):“ABBCD”与权重[1,2,4,1,3] 序列2(S2):“TBDC”带有权重[7,5,1,2] 假设MW(s,s)被定义为字符串s中子序列s相对于相关权重的最大权重。最重的公共子序列(HCS)定义为: HCS=argmin(兆瓦(秒,秒1),兆瓦(秒,秒2)) 算法输出应该是字符串中HCS的索引和权重。在这种情况下,索引将为: I_S1=[2,4]

我正在寻找一种算法,该算法可以解决具有以下条件的两个字符串的LCS问题:

每个字符串由英文字符组成,每个字符都有一个权重。例如:

序列1(S1):“ABBCD”与权重[1,2,4,1,3]

序列2(S2):“TBDC”带有权重[7,5,1,2]

假设
MW(s,s)
被定义为字符串
s
中子序列s相对于相关权重的最大权重。最重的公共子序列(HCS)定义为:

HCS=argmin(兆瓦(秒,秒1),兆瓦(秒,秒2))

算法输出应该是字符串中HCS的索引和权重。在这种情况下,索引将为:

I_S1=[2,4]->MW(“BD”,“ABBCD”)=7

I_S2=[1,2]->MW(“BD”,“TBDC”)=6


因此,
HCS=“BD”,且重量=min(MW(s,S1),MW(s,S2))=6。

您需要构建的表将具有此属性

for each position in sequence 1
    for each position in sequence 2
        for each extreme pair of (weight1, weight2)
            (last_position1, last_position2)
其中,极值对是指不可能找到到该点的子序列,其序列1中的权重和序列2中的权重均为>=且至少一个为>

可能存在多个极端对,其中一个序列高于另一个序列

规则是,在
(i,-1)
(-1,j)
位置,唯一的极端对是权重为0的空集。在任何其他情况下,我们合并
(i-1,j)
(i,j-1)
的极端对。然后,如果
seq1[i]=seq2[j]
,则在转到
(i-1,j-1)
的位置添加选项,然后将
i
j
包含在相应的子序列中。(因此将
weight1[i]
weight2[j]
添加到权重中,然后进行合并。)

对于该合并,您可以按权重1升序排序,前两个点的所有极值,然后丢弃权重2小于或等于序列中先前发布的最佳权重2的所有极值


当你到达终点时,你可以找到最小值最高的极端配对,这就是你的答案。然后,您可以遍历数据结构,找到有问题的子序列。

您做了什么来解决该任务?如果权重为非负,您可以使用与正常LCS相同的方法;但是,在递归公式中,应该使用权重之和来最小化字符数,而不是使用字符数。我不确定负权重的情况。是的,权重是非负的。你知道我可以用哪种LCS算法来修改和解决我自己的问题吗?