0% found this document useful (0 votes)
12 views59 pages

2 LCS

Uploaded by

sharmaujjwal133
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
12 views59 pages

2 LCS

Uploaded by

sharmaujjwal133
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 59

Longest Common Subsequence

Longest Common Subsequence

• How similar are these two species?

DNA: DNA:
AGCCCTAAGGGCTACCTAGCTT GACAGCCTACAAGCGTTAGCTTG
Longest Common Subsequence

• How similar are these two species?

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

Notation: denote this prefix ACGC by Y4

• Our sub-problems will be finding LCS’s of prefixes to X and Y.


• Let C[i,j] = length_of_LCS( Xi, Yj )
Examples: C[2,3] = 2
C[4,4] = 3
Optimal substructure ctd.

• Subproblem:
• finding LCS’s of prefixes of X and Y.

• Why is this a good choice?


• As we will see, there’s some relationship between LCS’s
of prefixes and LCS’s of the whole things.
• These subproblems overlap a lot.
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.
Goal

• Write C[i,j] in terms of the solutions to smaller subproblems


i

Xi A C G G A
j

Yj A C G C T T A

C[i,j] = length_of_LCS( Xi, Yj )


• Our sub-problems will be finding
Two cases LCS’s of prefixes to X and Y.
• Let C[i,j] = length_of_LCS( Xi, Yj )
Case 1: X[i] = Y[j]
i These are
the same

Xi A C G G A
j

Yj A C G C T T A

• Then C[i,j] = 1 + C[i-1,j-1].


• because LCS(Xi,Yj) = LCS(Xi-1,Yj-1) followed by A
• Our sub-problems will be finding
Two cases LCS’s of prefixes to X and Y.
• Let C[i,j] = length_of_LCS( Xi, Yj )
Case 2: X[i] != Y[j]
i These are
not the
same
Xi A C G G T
j

Yj A C G C T T A

• Then C[i,j] = max{ C[i-1,j], C[i,j-1] }.


• either LCS(Xi,Yj) = LCS(Xi-1,Yj) and T is not involved,
• or LCS(Xi,Yj) = LCS(Xi,Yj-1) and A is not involved,
• (maybe both are not involved, that’s covered by the “or”)
Recursive formulation of the optimal solution
X0
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.

• 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.
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
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.

• Step 4: If needed, keep track of some


additional info so that the algorithm from Step
3 can find the actual LCS.
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

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)

You might also like