【发布时间】:2016-04-11 21:31:03
【问题描述】:
如果最多一个序列有重复,我们可以将最长公共子序列问题简化为最长递增子序列问题。减少问题的过程说明here:
假设你有序列:
S1 = {D, B, A, C, E} S2 = {E, Z, X, D, A, Y, C}然后,创建一个整数序列 S3,其中您必须将 S2 的每个元素的位置放在 S1 中(如果该元素在 S1 中不存在,则忽略该元素)。在示例中:
S3 = {4, 0, 2, 3} // Z, X and Y in S2 where ignored然后,只需在 S3 中找到 LIS。要找到原始元素,只需使用 LIS 中的整数作为 S1 的索引。例如,在本例中,S3 的 LIS 为
{0, 2, 3},其中表示序列{D, A, C}。
这种方法是如何工作的?为什么这种归约解决了寻找最长公共子序列的问题?
【问题讨论】:
标签: algorithm dynamic-programming