Professional Documents
Culture Documents
DNA: DNA:
AGCCCTAAGGGCTACCTAGCTT GACAGCCTACAAGCGTTAGCTTG
Longest Common Subsequence
DNA: DNA:
AGCCCTAAGGGCTACCTAGCTT GACAGCCTACAAGCGTTAGCTTG
• Pretty similar, their DNA has a long common subsequence:
AGCCTAAGCTTAGCTT
Longest Common Subsequence
• Subsequence:
• BDFH is a subsequence of ABCDEFGH
• If X and Y are sequences, a common subsequence
• is a sequence which is a subsequence of both.
• BDFH is a common subsequence of ABCDEFGH and of
ABDFGHI
• A longest common subsequence…
• …is a common subsequence that is longest.
• The longest common subsequence of ABCDEFGH and
ABDFGHI is ABDFGH.
Steps for applying Dynamic Programming
• Step 1: Identify optimal substructure.
• Step 2: Find a recursive formulation for the
length of the longest common subsequence.
• Step 3: Use dynamic programming to find
the length of the longest common
subsequence.
• Step 4: If needed, keep track of some additional
info so that the algorithm from Step 3 can find
the actual LCS.
Step 1: Optimal substructure
Prefixes:
X A C G G T
Y A C G C T T A
• Subproblem:
• finding LCS’s of prefixes of X and Y.
Xi A C G G A
j
Yj A C G C T T A
Xi A C G G A
j
Yj A C G C T T A
Yj A C G C T T A
Case 0
0 𝑖𝑓 𝑖 = 0 𝑜𝑟 𝑗 = 0
𝐶 𝑖, 𝑗 = ൞𝐶 𝑖 − 1, 𝑗 − 1 + 1 𝑖𝑓 𝑋 𝑖 = 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
max 𝐶 𝑖, 𝑗 − 1 , 𝐶 𝑖 − 1, 𝑗 𝑖𝑓𝑋 𝑖 ≠ 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
Case 1 Case 2
Xi A C G G A Xi A C G G T
Yj A C G C T T A Yj A C G C T T A
Steps for applying Dynamic Programming
• Step 1: Identify optimal substructure.
• Step 2: Find a recursive formulation for the
length of the longest common subsequence.
• Return C and B
0 𝑖𝑓 𝑖 = 0 𝑜𝑟 𝑗 = 0
𝐶 𝑖, 𝑗 = ൞𝐶 𝑖 − 1, 𝑗 − 1 + 1 𝑖𝑓 𝑋 𝑖 = 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
max 𝐶 𝑖, 𝑗 − 1 , 𝐶 𝑖 − 1, 𝑗 𝑖𝑓𝑋 𝑖 ≠ 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
LCS DP
• LCS(X, Y):
• C[i,0] = C[0,j] = 0 for all i = 0,…,m, j=0,…n.
• For i = 1,…,m and j = 1,…,n:
• If X[i] = Y[j]:
• C[i,j] = C[i-1,j-1] + 1
• B[i,j] = “ ”
• Else:
• If C[i-1, j] >= C[i, j-1]
• C[i, j] = C[i-1, j]
• B[i, j] = “ ”
• Else:
• C[i,j] = C[i, j-1]
• B[i,j] = “ ”
• Return C and B
0 𝑖𝑓 𝑖 = 0 𝑜𝑟 𝑗 = 0
𝐶 𝑖, 𝑗 = ൞𝐶 𝑖 − 1, 𝑗 − 1 + 1 𝑖𝑓 𝑋 𝑖 = 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
max 𝐶 𝑖, 𝑗 − 1 , 𝐶 𝑖 − 1, 𝑗 𝑖𝑓𝑋 𝑖 ≠ 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
Example X A C G G A Y A C T G
Y Y
A C T G A C T G
A A
C C
X G X G
G G
A A
Table C Table B
0 𝑖𝑓 𝑖 = 0 𝑜𝑟 𝑗 = 0
𝐶 𝑖, 𝑗 = ൞𝐶 𝑖 − 1, 𝑗 − 1 + 1 𝑖𝑓 𝑋 𝑖 = 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
max 𝐶 𝑖, 𝑗 − 1 , 𝐶 𝑖 − 1, 𝑗 𝑖𝑓𝑋 𝑖 ≠ 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
Example X A C G G A Y A C T G
Y Y
A C T G A C T G
0 0 0 0 0
A 0 A
C 0 C
X G 0 X G
G 0 G
A 0 A
Table C Table B
0 𝑖𝑓 𝑖 = 0 𝑜𝑟 𝑗 = 0
𝐶 𝑖, 𝑗 = ൞𝐶 𝑖 − 1, 𝑗 − 1 + 1 𝑖𝑓 𝑋 𝑖 = 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
max 𝐶 𝑖, 𝑗 − 1 , 𝐶 𝑖 − 1, 𝑗 𝑖𝑓𝑋 𝑖 ≠ 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
Example X A C G G A Y A C T G
Y Y
A C T G A C T G
0 0 0 0 0
A 0 A
C 0 C
X G 0 X G
G 0 G
A 0 A
Table C Table B
0 𝑖𝑓 𝑖 = 0 𝑜𝑟 𝑗 = 0
𝐶 𝑖, 𝑗 = ൞𝐶 𝑖 − 1, 𝑗 − 1 + 1 𝑖𝑓 𝑋 𝑖 = 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
max 𝐶 𝑖, 𝑗 − 1 , 𝐶 𝑖 − 1, 𝑗 𝑖𝑓𝑋 𝑖 ≠ 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
Example X A C G G A Y A C T G
Y Y
A C T G A C T G
0 0 0 0 0
A 0 1 A
C 0 C
X G 0 X G
G 0 G
A 0 A
Table C Table B
0 𝑖𝑓 𝑖 = 0 𝑜𝑟 𝑗 = 0
𝐶 𝑖, 𝑗 = ൞𝐶 𝑖 − 1, 𝑗 − 1 + 1 𝑖𝑓 𝑋 𝑖 = 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
max 𝐶 𝑖, 𝑗 − 1 , 𝐶 𝑖 − 1, 𝑗 𝑖𝑓𝑋 𝑖 ≠ 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
Example X A C G G A Y A C T G
Y Y
A C T G A C T G
0 0 0 0 0
A 0 1 A
C 0 C
X G 0 X G
G 0 G
A 0 A
Table C Table B
0 𝑖𝑓 𝑖 = 0 𝑜𝑟 𝑗 = 0
𝐶 𝑖, 𝑗 = ൞𝐶 𝑖 − 1, 𝑗 − 1 + 1 𝑖𝑓 𝑋 𝑖 = 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
max 𝐶 𝑖, 𝑗 − 1 , 𝐶 𝑖 − 1, 𝑗 𝑖𝑓𝑋 𝑖 ≠ 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
Example X A C G G A Y A C T G
Y Y
A C T G A C T G
0 0 0 0 0
A 0 1 1 A
C 0 C
X G 0 X G
G 0 G
A 0 A
Table C Table B
0 𝑖𝑓 𝑖 = 0 𝑜𝑟 𝑗 = 0
𝐶 𝑖, 𝑗 = ൞𝐶 𝑖 − 1, 𝑗 − 1 + 1 𝑖𝑓 𝑋 𝑖 = 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
max 𝐶 𝑖, 𝑗 − 1 , 𝐶 𝑖 − 1, 𝑗 𝑖𝑓𝑋 𝑖 ≠ 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
Example X A C G G A Y A C T G
Y Y
A C T G A C T G
0 0 0 0 0
A 0 1 1 A
C 0 C
X G 0 X G
G 0 G
A 0 A
Table C Table B
0 𝑖𝑓 𝑖 = 0 𝑜𝑟 𝑗 = 0
𝐶 𝑖, 𝑗 = ൞𝐶 𝑖 − 1, 𝑗 − 1 + 1 𝑖𝑓 𝑋 𝑖 = 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
max 𝐶 𝑖, 𝑗 − 1 , 𝐶 𝑖 − 1, 𝑗 𝑖𝑓𝑋 𝑖 ≠ 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
Example X A C G G A Y A C T G
Y Y
A C T G A C T G
0 0 0 0 0
A 0 1 1 A
C 0 C
X G 0 X G
G 0 G
A 0 A
Table C Table B
0 𝑖𝑓 𝑖 = 0 𝑜𝑟 𝑗 = 0
𝐶 𝑖, 𝑗 = ൞𝐶 𝑖 − 1, 𝑗 − 1 + 1 𝑖𝑓 𝑋 𝑖 = 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
max 𝐶 𝑖, 𝑗 − 1 , 𝐶 𝑖 − 1, 𝑗 𝑖𝑓𝑋 𝑖 ≠ 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
Example X A C G G A Y A C T G
Y Y
A C T G A C T G
0 0 0 0 0
A 0 1 1 1 A
C 0 C
X G 0 X G
G 0 G
A 0 A
Table C Table B
0 𝑖𝑓 𝑖 = 0 𝑜𝑟 𝑗 = 0
𝐶 𝑖, 𝑗 = ൞𝐶 𝑖 − 1, 𝑗 − 1 + 1 𝑖𝑓 𝑋 𝑖 = 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
max 𝐶 𝑖, 𝑗 − 1 , 𝐶 𝑖 − 1, 𝑗 𝑖𝑓𝑋 𝑖 ≠ 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
Example X A C G G A Y A C T G
Y Y
A C T G A C T G
0 0 0 0 0
A 0 1 1 1 A
C 0 C
X G 0 X G
G 0 G
A 0 A
Table C Table B
0 𝑖𝑓 𝑖 = 0 𝑜𝑟 𝑗 = 0
𝐶 𝑖, 𝑗 = ൞𝐶 𝑖 − 1, 𝑗 − 1 + 1 𝑖𝑓 𝑋 𝑖 = 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
max 𝐶 𝑖, 𝑗 − 1 , 𝐶 𝑖 − 1, 𝑗 𝑖𝑓𝑋 𝑖 ≠ 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
Example X A C G G A Y A C T G
Y Y
A C T G A C T G
0 0 0 0 0
A 0 1 1 1 A
C 0 C
X G 0 X G
G 0 G
A 0 A
Table C Table B
0 𝑖𝑓 𝑖 = 0 𝑜𝑟 𝑗 = 0
𝐶 𝑖, 𝑗 = ൞𝐶 𝑖 − 1, 𝑗 − 1 + 1 𝑖𝑓 𝑋 𝑖 = 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
max 𝐶 𝑖, 𝑗 − 1 , 𝐶 𝑖 − 1, 𝑗 𝑖𝑓𝑋 𝑖 ≠ 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
Example X A C G G A Y A C T G
Y Y
A C T G A C T G
0 0 0 0 0
A 0 1 1 1 1 A
C 0 C
X G 0 X G
G 0 G
A 0 A
Table C Table B
0 𝑖𝑓 𝑖 = 0 𝑜𝑟 𝑗 = 0
𝐶 𝑖, 𝑗 = ൞𝐶 𝑖 − 1, 𝑗 − 1 + 1 𝑖𝑓 𝑋 𝑖 = 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
max 𝐶 𝑖, 𝑗 − 1 , 𝐶 𝑖 − 1, 𝑗 𝑖𝑓𝑋 𝑖 ≠ 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
Example X A C G G A Y A C T G
Y Y
A C T G A C T G
0 0 0 0 0
A 0 1 1 1 1 A
C 0 C
X G 0 X G
G 0 G
A 0 A
Table C Table B
0 𝑖𝑓 𝑖 = 0 𝑜𝑟 𝑗 = 0
𝐶 𝑖, 𝑗 = ൞𝐶 𝑖 − 1, 𝑗 − 1 + 1 𝑖𝑓 𝑋 𝑖 = 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
max 𝐶 𝑖, 𝑗 − 1 , 𝐶 𝑖 − 1, 𝑗 𝑖𝑓𝑋 𝑖 ≠ 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
Example X A C G G A Y A C T G
Y Y
A C T G A C T G
0 0 0 0 0
A 0 1 1 1 1 A
0 1 C
C
X G 0 X G
G 0 G
A 0 A
Table C Table B
0 𝑖𝑓 𝑖 = 0 𝑜𝑟 𝑗 = 0
𝐶 𝑖, 𝑗 = ൞𝐶 𝑖 − 1, 𝑗 − 1 + 1 𝑖𝑓 𝑋 𝑖 = 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
max 𝐶 𝑖, 𝑗 − 1 , 𝐶 𝑖 − 1, 𝑗 𝑖𝑓𝑋 𝑖 ≠ 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
Example X A C G G A Y A C T G
Y Y
A C T G A C T G
0 0 0 0 0
A 0 1 1 1 1 A
0 1 C
C
X G 0 X G
G 0 G
A 0 A
Table C Table B
0 𝑖𝑓 𝑖 = 0 𝑜𝑟 𝑗 = 0
𝐶 𝑖, 𝑗 = ൞𝐶 𝑖 − 1, 𝑗 − 1 + 1 𝑖𝑓 𝑋 𝑖 = 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
max 𝐶 𝑖, 𝑗 − 1 , 𝐶 𝑖 − 1, 𝑗 𝑖𝑓𝑋 𝑖 ≠ 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
Example X A C G G A Y A C T G
Y Y
A C T G A C T G
0 0 0 0 0
A 0 1 1 1 1 A
0 1 2 C
C
X G 0 X G
G 0 G
A 0 A
Table C Table B
0 𝑖𝑓 𝑖 = 0 𝑜𝑟 𝑗 = 0
𝐶 𝑖, 𝑗 = ൞𝐶 𝑖 − 1, 𝑗 − 1 + 1 𝑖𝑓 𝑋 𝑖 = 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
max 𝐶 𝑖, 𝑗 − 1 , 𝐶 𝑖 − 1, 𝑗 𝑖𝑓𝑋 𝑖 ≠ 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
Example X A C G G A Y A C T G
Y Y
A C T G A C T G
0 0 0 0 0
A 0 1 1 1 1 A
0 1 2 C
C
X G 0 X G
G 0 G
A 0 A
Table C Table B
0 𝑖𝑓 𝑖 = 0 𝑜𝑟 𝑗 = 0
𝐶 𝑖, 𝑗 = ൞𝐶 𝑖 − 1, 𝑗 − 1 + 1 𝑖𝑓 𝑋 𝑖 = 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
max 𝐶 𝑖, 𝑗 − 1 , 𝐶 𝑖 − 1, 𝑗 𝑖𝑓𝑋 𝑖 ≠ 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
Example X A C G G A Y A C T G
Y Y
A C T G A C T G
0 0 0 0 0
A 0 1 1 1 1 A
0 1 2 2 C
C
X G 0 X G
G 0 G
A 0 A
Table C Table B
0 𝑖𝑓 𝑖 = 0 𝑜𝑟 𝑗 = 0
𝐶 𝑖, 𝑗 = ൞𝐶 𝑖 − 1, 𝑗 − 1 + 1 𝑖𝑓 𝑋 𝑖 = 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
max 𝐶 𝑖, 𝑗 − 1 , 𝐶 𝑖 − 1, 𝑗 𝑖𝑓𝑋 𝑖 ≠ 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
Example X A C G G A Y A C T G
Y Y
A C T G A C T G
0 0 0 0 0
A 0 1 1 1 1 A
0 1 2 2 C
C
X G 0 X G
G 0 G
A 0 A
Table C Table B
0 𝑖𝑓 𝑖 = 0 𝑜𝑟 𝑗 = 0
𝐶 𝑖, 𝑗 = ൞𝐶 𝑖 − 1, 𝑗 − 1 + 1 𝑖𝑓 𝑋 𝑖 = 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
max 𝐶 𝑖, 𝑗 − 1 , 𝐶 𝑖 − 1, 𝑗 𝑖𝑓𝑋 𝑖 ≠ 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
Example X A C G G A Y A C T G
Y Y
A C T G A C T G
0 0 0 0 0
A 0 1 1 1 1 A
0 1 2 2 C
C
X G 0 X G
G 0 G
A 0 A
Table C Table B
0 𝑖𝑓 𝑖 = 0 𝑜𝑟 𝑗 = 0
𝐶 𝑖, 𝑗 = ൞𝐶 𝑖 − 1, 𝑗 − 1 + 1 𝑖𝑓 𝑋 𝑖 = 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
max 𝐶 𝑖, 𝑗 − 1 , 𝐶 𝑖 − 1, 𝑗 𝑖𝑓𝑋 𝑖 ≠ 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
Example X A C G G A Y A C T G
Y Y
A C T G A C T G
0 0 0 0 0
A 0 1 1 1 1 A
0 1 2 2 2 C
C
X G 0 X G
G 0 G
A 0 A
Table C Table B
0 𝑖𝑓 𝑖 = 0 𝑜𝑟 𝑗 = 0
𝐶 𝑖, 𝑗 = ൞𝐶 𝑖 − 1, 𝑗 − 1 + 1 𝑖𝑓 𝑋 𝑖 = 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
max 𝐶 𝑖, 𝑗 − 1 , 𝐶 𝑖 − 1, 𝑗 𝑖𝑓𝑋 𝑖 ≠ 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
Example X A C G G A Y A C T G
Y Y
A C T G A C T G
0 0 0 0 0
A 0 1 1 1 1 A
0 1 2 2 2 C
C
X G 0 X G
G 0 G
A 0 A
Table C Table B
0 𝑖𝑓 𝑖 = 0 𝑜𝑟 𝑗 = 0
𝐶 𝑖, 𝑗 = ൞𝐶 𝑖 − 1, 𝑗 − 1 + 1 𝑖𝑓 𝑋 𝑖 = 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
max 𝐶 𝑖, 𝑗 − 1 , 𝐶 𝑖 − 1, 𝑗 𝑖𝑓𝑋 𝑖 ≠ 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
Example X A C G G A Y A C T G
Y Y
A C T G A C T G
0 0 0 0 0
A 0 1 1 1 1 A
0 1 2 2 2 C
C
X G 0 1 X G
G 0 G
A 0 A
Table C Table B
0 𝑖𝑓 𝑖 = 0 𝑜𝑟 𝑗 = 0
𝐶 𝑖, 𝑗 = ൞𝐶 𝑖 − 1, 𝑗 − 1 + 1 𝑖𝑓 𝑋 𝑖 = 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
max 𝐶 𝑖, 𝑗 − 1 , 𝐶 𝑖 − 1, 𝑗 𝑖𝑓𝑋 𝑖 ≠ 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
Example X A C G G A Y A C T G
Y Y
A C T G A C T G
0 0 0 0 0
A 0 1 1 1 1 A
0 1 2 2 2 C
C
X G 0 1 2 X G
G 0 G
A 0 A
Table C Table B
0 𝑖𝑓 𝑖 = 0 𝑜𝑟 𝑗 = 0
𝐶 𝑖, 𝑗 = ൞𝐶 𝑖 − 1, 𝑗 − 1 + 1 𝑖𝑓 𝑋 𝑖 = 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
max 𝐶 𝑖, 𝑗 − 1 , 𝐶 𝑖 − 1, 𝑗 𝑖𝑓𝑋 𝑖 ≠ 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
Example X A C G G A Y A C T G
Y Y
A C T G A C T G
0 0 0 0 0
A 0 1 1 1 1 A
0 1 2 2 2 C
C
X G 0 1 2 2 X G
G 0 G
A 0 A
Table C Table B
0 𝑖𝑓 𝑖 = 0 𝑜𝑟 𝑗 = 0
𝐶 𝑖, 𝑗 = ൞𝐶 𝑖 − 1, 𝑗 − 1 + 1 𝑖𝑓 𝑋 𝑖 = 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
max 𝐶 𝑖, 𝑗 − 1 , 𝐶 𝑖 − 1, 𝑗 𝑖𝑓𝑋 𝑖 ≠ 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
Example X A C G G A Y A C T G
Y Y
A C T G A C T G
0 0 0 0 0
A 0 1 1 1 1 A
0 1 2 2 2 C
C
X G 0 1 2 2 2 X G
G 0 G
A 0 A
Table C Table B
0 𝑖𝑓 𝑖 = 0 𝑜𝑟 𝑗 = 0
𝐶 𝑖, 𝑗 = ൞𝐶 𝑖 − 1, 𝑗 − 1 + 1 𝑖𝑓 𝑋 𝑖 = 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
max 𝐶 𝑖, 𝑗 − 1 , 𝐶 𝑖 − 1, 𝑗 𝑖𝑓𝑋 𝑖 ≠ 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
Example X A C G G A Y A C T G
Y Y
A C T G A C T G
0 0 0 0 0
A 0 1 1 1 1 A
0 1 2 2 2 C
C
X G 0 1 2 2 2 X G
0 1 2 2
G G
A 0 A
Table C Table B
0 𝑖𝑓 𝑖 = 0 𝑜𝑟 𝑗 = 0
𝐶 𝑖, 𝑗 = ൞𝐶 𝑖 − 1, 𝑗 − 1 + 1 𝑖𝑓 𝑋 𝑖 = 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
max 𝐶 𝑖, 𝑗 − 1 , 𝐶 𝑖 − 1, 𝑗 𝑖𝑓𝑋 𝑖 ≠ 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
Example X A C G G A Y A C T G
Y Y
A C T G A C T G
0 0 0 0 0
A 0 1 1 1 1 A
0 1 2 2 2 C
C
X G 0 1 2 2 2 X G
0 1 2 2 3
G G
A 0 A
Table C Table B
0 𝑖𝑓 𝑖 = 0 𝑜𝑟 𝑗 = 0
𝐶 𝑖, 𝑗 = ൞𝐶 𝑖 − 1, 𝑗 − 1 + 1 𝑖𝑓 𝑋 𝑖 = 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
max 𝐶 𝑖, 𝑗 − 1 , 𝐶 𝑖 − 1, 𝑗 𝑖𝑓𝑋 𝑖 ≠ 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
Example X A C G G A Y A C T G
Y Y
A C T G A C T G
0 0 0 0 0
A 0 1 1 1 1 A
0 1 2 2 2 C
C
X G 0 1 2 2 2 X G
0 1 2 2 3
G G
0 1
A A
Table C Table B
0 𝑖𝑓 𝑖 = 0 𝑜𝑟 𝑗 = 0
𝐶 𝑖, 𝑗 = ൞𝐶 𝑖 − 1, 𝑗 − 1 + 1 𝑖𝑓 𝑋 𝑖 = 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
max 𝐶 𝑖, 𝑗 − 1 , 𝐶 𝑖 − 1, 𝑗 𝑖𝑓𝑋 𝑖 ≠ 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
Example X A C G G A Y A C T G
Y Y
A C T G A C T G
0 0 0 0 0
A 0 1 1 1 1 A
0 1 2 2 2 C
C
X G 0 1 2 2 2 X G
0 1 2 2 3
G G
0 1 2 2 3
A A
Table C Table B
0 𝑖𝑓 𝑖 = 0 𝑜𝑟 𝑗 = 0
𝐶 𝑖, 𝑗 = ൞𝐶 𝑖 − 1, 𝑗 − 1 + 1 𝑖𝑓 𝑋 𝑖 = 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
max 𝐶 𝑖, 𝑗 − 1 , 𝐶 𝑖 − 1, 𝑗 𝑖𝑓𝑋 𝑖 ≠ 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
Steps for applying Dynamic Programming
• Step 1: Identify optimal substructure.
• Step 2: Find a recursive formulation for the
length of the longest common subsequence.
• Step 3: Use dynamic programming to find
the length of the longest common
subsequence.
Y
A C T G
X G
Table B
Example X A C G G A Y A C T G
Y
A C T G
X G
Table B
Example X A C G G A Y A C T G
Y
A C T G
X G
Table B
Example X A C G G A Y A C T G
Y
A C T G
G A
X G
Table B
Example X A C G G A Y A C T G
Y
A C T G
G A
X G
Table B
Example X A C G G A Y A C T G
Y
A C T G
G A
X G
Table B
Example X A C G G A Y A C T G
Y
A C T G
G A
X G
Table B
Example X A C G G A Y A C T G
Y
A C T G
C G A
X G
Table B
Example X A C G G A Y A C T G
Y
A C T G
C G A
X G
Table B
Example X A C G G A Y A C T G
Y
A C T G
A C G A
X G
Table B
Example2 X A B C B D A B Y B D C A B A
Example2 X A B C B D A B Y B D C A B A
B D C A B A B D C A B A
Table C Table B
0 𝑖𝑓 𝑖 = 0 𝑜𝑟 𝑗 = 0
𝐶 𝑖, 𝑗 = ൞𝐶 𝑖 − 1, 𝑗 − 1 + 1 𝑖𝑓 𝑋 𝑖 = 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
max 𝐶 𝑖, 𝑗 − 1 , 𝐶 𝑖, 𝑗 − 1 𝑖𝑓𝑋 𝑖 ≠ 𝑌 𝑗 𝑎𝑛𝑑 𝑖, 𝑗 > 0
Steps for applying Dynamic Programming
Step 4: If needed, keep track of some additional info so that
the algorithm from Step 3 can find the actual LCS.
Algorithm
PRINT-LCS(𝐵, 𝑋, 𝑖, 𝑗)
1 if 𝑖 == 0 or 𝑗 == 0
2 return // the LCS has length 0
3 if 𝐵 𝑖, 𝑗 == “ ”
4 PRINT-LCS(𝐵, 𝑋, 𝑖, −1 𝑗 − 1)
5 print 𝑋[𝑖] // same as 𝑌[𝑗]
6 elseif 𝐵 𝑖, 𝑗 == “↑”
7 PRINT-LCS(𝐵, 𝑋, 𝑖, −1 𝑗)
8 else
9 PRINT-LCS(𝐵, 𝑋, 𝑖, 𝑗 − 1)