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

INPUT: Two Strings OUTPUT: Longest Common Subsequence Actgaactctgtgcact Tgactcagcacaaaaac

The document discusses the longest common subsequence problem. It describes how to find the longest common subsequence between two strings using a dynamic programming approach. It defines a matrix LCS(i,j) where LCS(i,j) represents the length of the longest common subsequence between the first i characters of one string and the first j characters of the other string. It provides a recursive formula to fill in the values of the matrix in O(mn) time where m and n are the lengths of the two strings.

Uploaded by

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

INPUT: Two Strings OUTPUT: Longest Common Subsequence Actgaactctgtgcact Tgactcagcacaaaaac

The document discusses the longest common subsequence problem. It describes how to find the longest common subsequence between two strings using a dynamic programming approach. It defines a matrix LCS(i,j) where LCS(i,j) represents the length of the longest common subsequence between the first i characters of one string and the first j characters of the other string. It provides a recursive formula to fill in the values of the matrix in O(mn) time where m and n are the lengths of the two strings.

Uploaded by

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

Longest common subsequence

INPUT: two strings

OUTPUT: longest common subsequence

ACTGAACTCTGTGCACT

TGACTCAGCACAAAAAC
Longest common subsequence
INPUT: two strings

OUTPUT: longest common subsequence

ACTGAACTCTGTGCACT

TGACTCAGCACAAAAAC
Longest common subsequence

If the sequences end with the same


symbol s, then LCS ends with s.

s
Longest common subsequence
Sequences x1,…,xn, and y1,…,ym

LCS(i,j) = length of a longest common


subsequence of x1,…,xi and y1,…,yj
Longest common subsequence
Sequences x1,…,xn, and y1,…,ym

LCS(i,j) = length of a longest common


subsequence of x1,…,xi and y1,…,yj

if xi = yj then
LCS(i,j) =
Longest common subsequence
Sequences x1,…,xn, and y1,…,ym

LCS(i,j) = length of a longest common


subsequence of x1,…,xi and y1,…,yj

if xi = yj then
LCS(i,j) = 1 + LCS(i-1,j-1)
Longest common subsequence
Sequences x1,…,xn, and y1,…,ym

LCS(i,j) = length of a longest common


subsequence of x1,…,xi and y1,…,yj

if xi  yj then
LCS(i,j) = max (LCS(i-1,j),LCS(i,j-1))

xi and yj cannot both be in LCS


Longest common subsequence
Sequences x1,…,xn, and y1,…,ym

LCS(i,j) = length of a longest common


subsequence of x1,…,xi and y1,…,yj

if xi = yj then
LCS(i,j) = 1 + LCS(i-1,j-1)
if xi  yj then
LCS(i,j) = max (LCS(i-1,j),LCS(i,j-1))
Longest common subsequence

Running time ?
Sequences x1,…,xn, and y1,…,ym

LCS(i,j) = length of a longest common


subsequence of x1,…,xi and y1,…,yj
if xi = yj then
LCS(i,j) = 1 + LCS(i-1,j-1)
if xi  yj then
LCS(i,j) = max (LCS(i-1,j),LCS(i,j-1))
Longest common subsequence

Running time = O(mn)


Sequences x1,…,xn, and y1,…,ym

LCS(i,j) = length of a longest common


subsequence of x1,…,xi and y1,…,yj
if xi = yj then
LCS(i,j) = 1 + LCS(i-1,j-1)
if xi  yj then
LCS(i,j) = max (LCS(i-1,j),LCS(i,j-1))
Optimal matrix multiplication
c
b

a b =

A = a x b matrix
B = b x c matrix

How many operations to compute AB ?


Optimal matrix multiplication
c
b

a b =
Optimal matrix multiplication
c
b

a b =

each entry of A * B takes (b) time


need to compute ac entries  (abc) time
total
Optimal matrix multiplication

NxN NxN
matrix matrix

A B

Compute AB, time = ?


Optimal matrix multiplication

NxN NxN
matrix matrix

A B

Compute AB, time = (N3)


Optimal matrix multiplication

N x 1 matrix
NxN NxN
matrix matrix

A B C

Compute AB, time = (N3)

Compute ABC, time = ?


Optimal matrix multiplication

N x 1 matrix
NxN NxN
matrix matrix

A B C

Compute D=BC, time = ?


Compute AD, time = ?
Compute ABC, time = ?
Optimal matrix multiplication

N x 1 matrix
NxN NxN
matrix matrix

A B C

Compute D=BC, time = (N2)


Compute AD, time = ?
Compute ABC, time = ?
Optimal matrix multiplication

N x 1 matrix
NxN
matrix

A D

Compute D=BC, time = (N2)


Compute AD, time = ?
Compute ABC, time = ?
Optimal matrix multiplication

N x 1 matrix
NxN
matrix

A D

Compute D=BC, time = (N2)


Compute AD, time = (N2)
Compute ABC, time = (N2)
Optimal matrix multiplication

N x 1 matrix
NxN NxN
matrix matrix

A B C
(AB)C = ABC = A(BC)
The order of evaluation
does not change the result
can change the amount of work needed
Optimal matrix multiplication
a1,a2,a3,….,an

n-1 matrices of sizes


a1 x a2 B1
a2 x a3 B2
a3 x a4 B3
….
an-1 x an Bn-1

What order should we multiply them in?


Optimal matrix multiplication
B1 B2 B3 B4 … Bn-1

B1 (B2 B3 B4 … Bn-1 )
(B1 B2) (B3 B4 … Bn-1 )
(B1 B2 B3) (B4 … Bn-1 )

(B1 B2 B3 B4 …) Bn-1
Optimal matrix multiplication
B1 B2 B3 B4 … Bn-1

K[i,j] = the minimal number of operations


needed to multiply Bi … Bj

Bi (Bi+1 Bi+2 … Bj ) K[i,i] + K[i+1,j] + aiai+1aj+1


(Bi Bi+1) (Bi+2 … Bj ) K[i,i+1] + K[i+2,j] + aiai+2aj+1
(Bi Bi+1 Bi+2) ( … Bj ) K[i,i+2] + K[i+3,j] + aiai+3aj+1

(B1 B2 B3 …) Bj K[i,j-1] + K[j,j] + aiajaj+1
Optimal matrix multiplication
B1 B2 B3 B4 … Bn-1

K[i,j] = the minimal number of operations


needed to multiply Bi … Bj

K[i,i]=0

K[i,j] = min K[i,w] + K[w+1,j] + ai aw+1 aj


iw< j
Travelling Salesman Problem

INPUT:
N cities, NxN symmetric matrix D,
D(i,j) = distance between city i and j

OUTPUT:
the shortest tour visiting all the cities
Travelling Salesman Problem

Algorithm 1 – try all possibilities

for each permutation  of {1,...,n}


visit the cities in the order ,
compute distance travelled,

pick the best solution

running time = ?
Travelling Salesman Problem

Algorithm 1 – try all possibilities

for each permutation  of {1,...,n}


visit the cities in the order ,
compute distance travelled,

pick the best solution

running time  n!

is (n+1)! = O(n!) ?
Travelling Salesman Problem
for each subset S of the cities with
|S|  2 and each u,v S

K[S,u,v] the length of the shortest path that


* starts at u
* ends at v
* visits all cities in S
How large is K ?
Travelling Salesman Problem
for each subset S of the cities with
|S|  2 and each u,v S

K[S,u,v] the length of the shortest path that


* starts at u
* ends at v
* visits all cities in S
How large is K ?

 2n n2
Travelling Salesman Problem

K[S,u,v]

some vertex w  S – {u,v}


must be visited first
d(u,w) = we get to w
K[S-u,w,v] = we need to get from w to v
and visit all vertices in S-u
Travelling Salesman Problem
K[S,u,v] the length of the shortest path that
* starts at u
* ends at v
* visits all cities in S

if S={u,v} then K[S,u,v]=d(u,v)

if |S|>2 then

K[S,u,v] = min K[S-u,w,v] + d(u,w)


wS-{u,v}
Travelling Salesman Problem
if S={u,v} then K[S,u,v]=d(u,v)

if |S|>2 then

K[S,u,v] = min K[S-u,w,v] + d(u,w)


wS-{u,v}

Running time = ?
K  2n n2
Travelling Salesman Problem
if S={u,v} then K[S,u,v]=d(u,v)

if |S|>2 then

K[S,u,v] = min K[S-u,w,v] + d(u,w)


wS-{u,v}

Running time = O(n 3 2 )


n

K  2n n2
Travelling Salesman Problem
dynamic programming = O(n3 2n)
brute force = O(n!)
Longest increasing subsequence
INPUT: numbers a1, a2, ... , an

OUTPUT: longest increasing subsequence

1,9,2,4,7,5,6

1,9,2,4,7,5,6
Longest increasing subsequence
INPUT: numbers a1, a2, ... , an

OUTPUT: longest increasing subsequence

reduce to a problem that we saw today


Longest increasing subsequence
INPUT: numbers a1, a2, ... , an

OUTPUT: longest increasing subsequence


Longest increasing subsequence
INPUT: numbers a1, a2, ... , an

OUTPUT: longest increasing subsequence

K[0..n,0..n]

K[i,j] = the minimum last element of an


increasing seqence in a1, ... ,ai
of length j (if no sequence  )
Longest increasing subsequence
K[0..n,0..n]

K[i,j] = the minimum last element of an


increasing seqence in a1, ... ,ai
of length j (if no sequence  )

true/false: K[i,j]  K[i,j+1] ?


Longest increasing subsequence
K[0..n,0..n]

K[i,j] = the minimum last element of an


increasing seqence in a1, ... ,ai
of length j (if no sequence  )

K[0,j] = ? for j  1

K[0,0] = ?
Longest increasing subsequence
K[0..n,0..n]

K[i,j] = the minimum last element of an


increasing seqence in a1, ... ,ai
of length j (if no sequence  )

K[0,j] =  for j  1

K[0,0] = - 
Longest increasing subsequence
K[0..n,0..n]

K[i,j] = the minimum last element of an


increasing seqence in a1, ... ,ai
of length j (if no sequence  )

K[i,j] = ?
Longest increasing subsequence
K[0..n,0..n]

K[i,j] = the minimum last element of an


increasing seqence in a1, ... ,ai
of length j (if no sequence  )
K[i,j] = ai if ai < K[i-1,j]
and
ai > K[i-1,j-1]

K[i,j] = K[i-1,j] otherwise


Longest increasing subsequence
K[0..n,0..n]

K[i,j] = the minimum last element of an


increasing seqence in a1, ... ,ai
of length j (if no sequence  )
K[i,0] = -
K[i,1] = ai < K[i-1,j]
K[i,2] = and
... ai > K[i-1,j-1]
K[i,j] =
K[i,j+1] =
Longest increasing subsequence
K[0,0] = -
K[0,1] = 
K[0,2] = 
K[0,3] = 
K[0,4] = 
K[0,5] = 
K[0,6] = 

1,9,2,4,7,5,6
Longest increasing subsequence
K[1,0] = -
K[1,1] = 1
K[1,2] = 
K[1,3] = 
K[1,4] = 
K[1,5] = 
K[1,6] = 

1,9,2,4,7,5,6
Longest increasing subsequence
K[1,0] = -
K[1,1] = 1
K[1,2] = 
K[1,3] = 
K[1,4] = 
K[1,5] = 
K[1,6] = 

1,9,2,4,7,5,6
Longest increasing subsequence
K[2,0] = -
K[2,1] = 1
K[2,2] = 9
K[2,3] = 
K[2,4] = 
K[2,5] = 
K[2,6] = 

1,9,2,4,7,5,6
Longest increasing subsequence
K[2,0] = -
K[2,1] = 1
K[2,2] = 9
K[2,3] = 
K[2,4] = 
K[2,5] = 
K[2,6] = 

1,9,2,4,7,5,6
Longest increasing subsequence
K[3,0] = -
K[3,1] = 1
K[3,2] = 2
K[3,3] = 
K[3,4] = 
K[3,5] = 
K[3,6] = 

1,9,2,4,7,5,6
Longest increasing subsequence
K[3,0] = -
K[3,1] = 1
K[3,2] = 2
K[3,3] = 
K[3,4] = 
K[3,5] = 
K[3,6] = 

1,9,2,4,7,5,6
Longest increasing subsequence
K[4,0] = -
K[4,1] = 1
K[4,2] = 2
K[4,3] = 4
K[4,4] = 
K[4,5] = 
K[4,6] = 

1,9,2,4,7,5,6
Longest increasing subsequence
K[4,0] = -
K[4,1] = 1
K[4,2] = 2
K[4,3] = 4
K[4,4] = 
K[4,5] = 
K[4,6] = 

1,9,2,4,7,5,6
Longest increasing subsequence
K[5,0] = -
K[5,1] = 1
K[5,2] = 2
K[5,3] = 4
K[5,4] = 7
K[5,5] = 
K[5,6] = 

1,9,2,4,7,5,6
Longest increasing subsequence
K[5,0] = -
K[5,1] = 1
K[5,2] = 2
K[5,3] = 4
K[5,4] = 7
K[5,5] = 
K[5,6] = 

1,9,2,4,7,5,6
Longest increasing subsequence
K[6,0] = -
K[6,1] = 1
K[6,2] = 2
K[6,3] = 4
K[6,4] = 5
K[6,5] = 
K[6,6] = 

1,9,2,4,7,5,6
Longest increasing subsequence
K[6,0] = -
K[6,1] = 1
K[6,2] = 2
K[6,3] = 4
K[6,4] = 5
K[6,5] = 
K[6,6] = 

1,9,2,4,7,5,6
Longest increasing subsequence
K[7,0] = -
K[7,1] = 1
K[7,2] = 2
K[7,3] = 4
K[7,4] = 5
K[7,5] = 6 answer = 5
K[7,6] = 

1,9,2,4,7,5,6

You might also like