【动态规划】最长公共子序列问题(Longest common subsequence problem)

根据算法课总结。

最长公共子序列是一种衡量两个string相似度的方式。

子序列(subsequence)是包含在string里的序列,它不需要连续,可间断。

因为一个string 有2^N个子序列,所以如果用穷举法(brute force method),则需要O(2^N)次。


【动态规划】最长公共子序列问题(Longest common subsequence problem)_第1张图片


【动态规划】最长公共子序列问题(Longest common subsequence problem)_第2张图片
【动态规划】最长公共子序列问题(Longest common subsequence problem)_第3张图片
【动态规划】最长公共子序列问题(Longest common subsequence problem)_第4张图片

动态规划是可行的。

1. 这个问题有最优结构(optimal structure)。

2. 有重叠的子问题(overlapping subproblems)。

3. Θ(MN)

java 代码,两种方法。


【动态规划】最长公共子序列问题(Longest common subsequence problem)_第5张图片
【动态规划】最长公共子序列问题(Longest common subsequence problem)_第6张图片

重建LCS


【动态规划】最长公共子序列问题(Longest common subsequence problem)_第7张图片

performance


【动态规划】最长公共子序列问题(Longest common subsequence problem)_第8张图片

你可能感兴趣的:(【动态规划】最长公共子序列问题(Longest common subsequence problem))