DP_LCS

简介:

The Longest Common Subsequence problem

Give two strings a and b. return the length of the longest common subsequence of them.

Note: characters in subsequence needn’t to be consecutive, but in substring, it is

For example, string a = “abcdefg”, string b = “bcdg”, Then, the longest commons subsequence is “bcdg”, but the longest common substring is “bcd”.

 

Analysis:

Most DP problem needs to hold an array to store the partial solutions, so does this one.

Assume t[,] is the array to hold the solution, t[i, j] means the length of the LCS between a0a1…ai-1ai and b0b1…bj-1bj, And we can compute t[i,j] in such way

  • If(a[i] == b[j]) then increase the length by 1

t[i, j] = t[i – 1, j – 1] + 1

  • else

t[i, j] = max(t[i – 1, j], t[i, j – 1]) ;

 

How to initialize array t? If string a or string b is empty, then the length will be 0. So we initialize the first row and first column of t to 0, and we need an extra row and column to hold these 0s

The following table shows you the detail steps to compute the solution

 

First, initialize array t

 

Index a

0

1

2

3

4

5

Index b 

 

 

a

b

c

d

e

0

 

0

0

0

0

0

0

1

b

0

 

 

 

 

 

2

c

0

 

 

 

 

 

3

e

0

 

 

 

 

 

 

Compute the first row

 

Index a

0

1

2

3

4

5

Index b 

 

 

a

b

c

d

e

0

 

0

0

0

0

0

0

1

b

0

0

1

1

1

1

2

c

0

 

 

 

 

 

3

e

0

 

 

 

 

 

 

Compute the second row

 

Index a

0

1

2

3

4

5

Index b 

 

 

a

b

c

d

e

0

 

0

0

0

0

0

0

1

b

0

0

1

1

1

1

2

c

0

0

1

2

2

2

3

e

0

0

1

2

2

3

So the result is the last element 3

When you compute any value t[i,j]in the table, first see if a[i] == b[j], it that’s true

Then t[i,j] wil be it’s upper left value in table plus one, t[1,2] is the case

Because b[1] = ‘b’,a[2] = ‘b’, so t[1,2] == t[0,1] + 1 = 0 + 1 = 1. if that’s false(a[i] != b[j]), then t[i,j] will be the max value between it’s left value and up value in the table, t[1,3] is in this case, since b[1] = ‘b’, and a[3] = ‘c’, they are different, so t[1,3] = max(t[1, 2] + t[0,3]


本文转自zdd博客园博客,原文链接:http://www.cnblogs.com/graphics/archive/2009/06/05/1496845.html,如需转载请自行联系原作者

相关文章
|
决策智能
【dp】背包问题
【dp】背包问题
348 2
|
6月前
[leetcode ~dp ]279. 完全平方数
[leetcode ~dp ]279. 完全平方数
|
6月前
daimayuan 括号序列(dp)
daimayuan 括号序列(dp)
37 0
|
存储
动态规划(DP)
动态规划(DP)
60 0
|
存储 算法
dp 就 dp ,数位dp是什么意思 ?
dp 就 dp ,数位dp是什么意思 ?
365 0
|
机器学习/深度学习 人工智能
51nod 1055 最长等差数列 (dp好题)
51nod 1055 最长等差数列 (dp好题)
50 0
|
算法
【动态规划】使用到dp的题
【动态规划】使用到dp的题
111 0
|
机器学习/深度学习 人工智能