LCS最长子序列匹配算法讲诉.doc

首先将要看到如何运用动态编程查找两个 DNA 序列的最长公共子序列(longest common subsequence,LCS)。发现了新的基因序列的生物学家通常想知道该基因序列与其他哪个序列最相似。查找 LCS 是计算两个序列相似程度的一种方法:LCS 越长,两个序列越相似。 子序列中的字符与子字符串中的字符不同,它们不需要是连续的。例如,ACE 是 ABCDE 的子序列,但不是它的子字符串。请看下面两个 DNA 序列: S1 = DEGCCCTAGCGDE S2 = DEGCGCAATGDE 这两个序列的 LCS 是 GCCAG。(请注意,这仅是一个 LCS,而不是唯一的 LCS,因为可能存在其他长度相同的公共子序列。这种最优化问题和其他最优化问题的解可能不止一个。) LCS 算法 首先,考虑如何递归地计算 LCS。令: C1 是 S1 最右侧的字符 C2 是 S2 最右侧的字符 S1 是 S1 中 “切掉” C1 的部分 S2 是 S2 中 “切掉” C2 的部分 有三个递归子问题: L1 = LCS(S1, S2) L2 = LCS(S1, S2) L3 = LCS(S1, S2) 结果表明(而且很容易使人相信)原始问题的解就是下面三个子序列中最长的一个: L1 L2 如果 C1 等于 C2,则为 L3 后端加上 C1 ,如果 C1 不等于 C2,则为 L3。 (基线条件

文档评论(0)

1亿VIP精品文档

相关文档