LTi*_*Tim 3 algorithm dynamic-programming lcs
有没有办法在O(NlogN)时间内找到两个序列中最长的公共子序列?
我在某处读到有一种方法可以使用二进制搜索来实现这一点.
我知道需要O(N 2)时间的dp方法.
对于一般情况,O(N ^ 2)动态编程算法是您可以做的最好的.但是,在某些特殊情况下存在更好的算法.
这是一种非常普遍的情况.由某些字母表中的字母组成的序列(例如英语)属于此类别.对于这种情况,可以优化O(N*M)算法以使用四个俄罗斯人的方法获得O(N ^ 2/logN).我不知道究竟是什么,你可以搜索它.
一个示例问题是"给定从1到N的两个数字排列,找到它们的LCS".这个可以用O(N*logN)来解决.
令序列为A和B.
定义序列C.C [i]是A中B [i]的索引.(A [C [i]] = B [i])
A和B的LCS 最长增加 C的后续序列
| 归档时间: |
|
| 查看次数: |
5783 次 |
| 最近记录: |