0% found this document useful (0 votes)
94 views4 pages

Longest Common Subsequence (DP Approach)

The document discusses the longest common subsequence (LCS) problem and describes how it can be solved using dynamic programming. It presents a procedure called LCS-LENGTH that takes two sequences as input and uses two tables, c and b, to compute the length of the LCS in O(mn) time where m and n are the lengths of the sequences. It also describes how to use the b table to reconstruct the actual LCS characters by tracing through the table from the bottom right corner in reverse order.

Uploaded by

shubham
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)
94 views4 pages

Longest Common Subsequence (DP Approach)

The document discusses the longest common subsequence (LCS) problem and describes how it can be solved using dynamic programming. It presents a procedure called LCS-LENGTH that takes two sequences as input and uses two tables, c and b, to compute the length of the LCS in O(mn) time where m and n are the lengths of the sequences. It also describes how to use the b table to reconstruct the actual LCS characters by tracing through the table from the bottom right corner in reverse order.

Uploaded by

shubham
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/ 4

Longest Common Subsequence (DP Approach)

Definition: The Longest Common Subsequence (LCS) problem is as follows. We are given
two strings: string S of length n, and string T of length m. Our goal is to produce their
longest common subsequence: the longest sequence of characters that appears left-to-
right (but not necessarily in a contiguous block) in both strings.

Created by T. K. Bayen
In the longest-common-subsequence problem, we are given two sequences X = (x1, x2, ...,
xm) and Y = (y1, y2, ..., yn) and wish to find a maximum-length common subsequence of X
and Y . This section shows that the LCS problem can be solved efficiently using dynamic
programming.

A. Computing the length of an LCS:

Procedure LCS-LENGTH takes two sequences X = (x1, x2, ..., xm) and Y = (y1, y2, ..., yn) as
inputs. It stores the c[i, j] values in a table c[0… m, 0… n] whose entries are computed in
row-major order. (That is, the first row of c is filled in from left to right, then the second
row, and so on.) It also maintains the table b[1… m, 1…n] to simplify construction of an
optimal solution. Intuitively, b[i, j] points to the table entry corresponding to the optimal
subproblem solution chosen when computing c[i, j]. The procedure returns the b and c
tables; c[m, n] contains the length of an LCS of X and Y.

“↖”

Created by T. K. Bayen
Figure 1 shows the tables produced by LCS-LENGTH on the sequences X = (A, B, C, B, D, A,
B) and Y = (B, D, C, A, B, A). The running time of the procedure is O(mn), since each table
entry takes O(1) time to compute.

Figure 1: The c and b tables computed by LCS-LENGTH on the sequences X = (A, B, C, B, D, A, B)


and Y = (B, D, C, A, B, A). The square in row i and column j contains the value of c[i, j] and the
appropriate arrow for the value of b[i, j]. The entry 4 in c[7, 6]—the lower right-hand corner of
the table—is the length of an LCS (B, C, B, A) of X and Y . For i, j > 0, entry c[i, j] depends only on
whether xi =yj and the values in entries c[i - 1, j], c[i, j - 1], and c[i - 1, j - 1], which are computed
before c[i, j]. To reconstruct the elements of an LCS, follow the b[i, j] arrows from the lower right-
hand corner; the path is shaded. Each "↖" on the path corresponds to an entry (highlighted) for
which xi = yj is a member of an LCS.

B. Constructing an LCS
The b table returned by LCS-LENGTH can be used to quickly construct an LCS of X = (x1, x2,
..., xm) and Y = (y1, y2, ..., yn). We simply begin at b[m, n] and trace through the table
following the arrows. Whenever we encounter a "↖" in entry b[i, j], it implies that xi = yj
is an element of the LCS. The elements of the LCS are encountered in reverse order by this
method. The following recursive procedure prints out an LCS of X and Y in the proper,
forward order. The initial invocation is PRINT-LCS(b, X, length[X], length[Y]).

Created by T. K. Bayen
“↖”

For the b table in Figure1, this procedure prints "BCBA". The procedure takes time O(m
+n), since at least one of i and j is decremented in each stage of the recursion.

Created by T. K. Bayen

You might also like