Design and Analysis of Algorithms
ผศ. ดร. สมชาย ประสิทธิ์จูตระกูล ภาควิชาวิศวกรรมคอมพิวเตอร
จุฬาลงกรณมหาวิทยาลัย 2542
http://www.cp.eng.chula.ac.th/faculty/spj
คําเตือน
เนื้อหาอันรวมถึงขอความ ตัวเลข สัญลักษณ รูปภาพ และ คําบรรยาย อาจมีขอผิดพลาดแฝงอยู ผูจัดทําจะไมรับผิด ชอบตอความเสียหายทั้งทางดานผลการเรียน สุขภาพกาย และสุขภาพจิตใดๆ อันเนื่องมาจากการใชสื่อการเรียนนี้
Dynamic Programming
Longest Common Subsequence
Outline
• Definition
• Optimal Substructure
• Recurrence of solution
• Example
• Analysis
http://www.cp.eng.chula.ac.th/faculty/spj
Subsequence
• X = < s, o, m, c, h, a, i >
• subsequences of X
– < s, o, m, c, h, a, i > → < s, o, m >
– < s, o, m, c, h, a, i > → <c, h, a, i>
– < s, o, m, c, h, a, i > → <s, o, h, a, i>
– ...
http://www.cp.eng.chula.ac.th/faculty/spj
Common Subsequence
• X = < s, o, m, c, h, a, i >, Y = < c, h, u, a, n >
• common subsequences of X and Y
– < s, o, m, c, h, a, i > → < c >
< c, h, u, a, n >
– < s, o, m, c, h, a, i > → <c, a>
< c, h, u, a, n >
– < s, o, m, c, h, a, i > → <c, h, a>
< c, h, u, a, n >
– ...
Longest Common Subsequence
• Input : two sequences, X = < x 1 , x 2 ,…, x m >
and Y = < y 1 , y 2 ,…, y n >
• Output : longest common subsequence of X and Y
• X = <a, b, c, b, d, a, b>, Y = <b, d, c, a, b, a>
• LCS( X, Y ) = <b, c, a, b>, <b, d, a, b>
Optimal Structure of an LCS
a a X i
Y j
x i
y j
LCS( X i , Y j ) = LCS( X i-1 , Y j-1 ) + x i x i = y j
c( i, j ) = c( i-1, j-1 ) + 1
http://www.cp.eng.chula.ac.th/faculty/spj
Optimal Structure of an LCS
a b X i
Y j
x i
y j LCS( X i , Y j ) = LCS( X i-1 , Y j )
x i ≠ y j
c( i, j ) = c( i-1, j)
http://www.cp.eng.chula.ac.th/faculty/spj
Optimal Structure of an LCS
a b X i
Y j
x i
y j LCS( X i , Y j ) = LCS( X i , Y j-1 )
x i ≠ y j
c( i, j ) = c( i, j-1 )
Recurrence of Solution
X i Y j
x i
y j
c( i, j ) = 1+c( i-1, j-1 )
max(c( i-1, j ) c( i, j-1 ))
0 if i=0 or j=0
if i, j > 0 and x i = y j if i, j > 0 and x i ≠ y j
LCS : Example
y j D C A B
A B C B D x i
j 0 1 2 3 4 5
i
0 1 2 3 4 5
c( i, j ) = 1+c( i-1, j-1 )
max(c( i-1, j ) c( i, j-1 ))
0 if i=0 or j=0
if i, j > 0 and x i = y j if i, j > 0 and x i ≠ y j B
0 0 0 0 0
0 0 0 0 0
0
http://www.cp.eng.chula.ac.th/faculty/spj
LCS : Example
y j D C A B
A B C B D x i
j 0 1 2 3 4 5
i
0 1 2 3 4 5
c( i, j ) = 1+c( i-1, j-1 )
max(c( i-1, j ) c( i, j-1 ))
0 if i=0 or j=0
if i, j > 0 and x i = y j if i, j > 0 and x i ≠ y j B
0 0 0 0 0
0 0 0 0 0 0 0
http://www.cp.eng.chula.ac.th/faculty/spj
LCS : Example
y j D C A B
A B C B D x i
j 0 1 2 3 4 5
i
0 1 2 3 4 5
c( i, j ) = 1+c( i-1, j-1 )
max(c( i-1, j ) c( i, j-1 ))
0 if i=0 or j=0
if i, j > 0 and x i = y j if i, j > 0 and x i ≠ y j B
0 0 0 0 0
0 0 0 0 0 0 0 0
LCS : Example
y j D C A B
A B C B D x i
j 0 1 2 3 4 5
i
0 1 2 3 4 5
c( i, j ) = 1+c( i-1, j-1 )
max(c( i-1, j ) c( i, j-1 ))
0 if i=0 or j=0
if i, j > 0 and x i = y j if i, j > 0 and x i ≠ y j B
0 0 0 0 0
0 0 0 0 0 0 0 0 0
LCS : Example
y j D C A B
A B C B D x i
j 0 1 2 3 4 5
i
0 1 2 3 4 5
c( i, j ) = 1+c( i-1, j-1 )
max(c( i-1, j ) c( i, j-1 ))
0 if i=0 or j=0
if i, j > 0 and x i = y j if i, j > 0 and x i ≠ y j B
0 0 0 0 0
0 0 0 0 0
0 0 0 0 1
http://www.cp.eng.chula.ac.th/faculty/spj
LCS : Example
y j D C A B
A B C B D x i
j 0 1 2 3 4 5
i
0 1 2 3 4 5
c( i, j ) = 1+c( i-1, j-1 )
max(c( i-1, j ) c( i, j-1 ))
0 if i=0 or j=0
if i, j > 0 and x i = y j if i, j > 0 and x i ≠ y j B
0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 1
http://www.cp.eng.chula.ac.th/faculty/spj
LCS : Example
y j D C A B
A B C B D x i
j 0 1 2 3 4 5
i
0 1 2 3 4 5
c( i, j ) = 1+c( i-1, j-1 )
max(c( i-1, j ) c( i, j-1 ))
0 if i=0 or j=0
if i, j > 0 and x i = y j if i, j > 0 and x i ≠ y j B
0 0 0 0 0
0 0 0 0 0 0 0
1 0 0 1 1
LCS : Example
y j D C A B
A B C B D x i
j 0 1 2 3 4 5
i
0 1 2 3 4 5
c( i, j ) = 1+c( i-1, j-1 )
max(c( i-1, j ) c( i, j-1 ))
0 if i=0 or j=0
if i, j > 0 and x i = y j if i, j > 0 and x i ≠ y j B
0 0 0 0 0
0 0 0 0 0 0 0
1 0 0
1 1 1
LCS : Example
y j D C A B
A B C B D x i
j 0 1 2 3 4 5
i
0 1 2 3 4 5
c( i, j ) = 1+c( i-1, j-1 )
max(c( i-1, j ) c( i, j-1 ))
0 if i=0 or j=0
if i, j > 0 and x i = y j if i, j > 0 and x i ≠ y j B
0 0 0 0 0
0 0 0 0 0 0 0
1 0 0 1
1 1 1
http://www.cp.eng.chula.ac.th/faculty/spj
LCS : Example
y j D C A B
A B C B D x i
j 0 1 2 3 4 5
i
0 1 2 3 4 5
c( i, j ) = 1+c( i-1, j-1 )
max(c( i-1, j ) c( i, j-1 ))
0 if i=0 or j=0
if i, j > 0 and x i = y j if i, j > 0 and x i ≠ y j B
0 0 0 0 0
0 0 0 0 0 0 0
1 0 0 1
1 1 1
1
http://www.cp.eng.chula.ac.th/faculty/spj
LCS : Example
y j D C A B
A B C B D x i
j 0 1 2 3 4 5
i
0 1 2 3 4 5
c( i, j ) = 1+c( i-1, j-1 )
max(c( i-1, j ) c( i, j-1 ))
0 if i=0 or j=0
if i, j > 0 and x i = y j if i, j > 0 and x i ≠ y j B
0 0 0 0 0
0 0 0 0 0 0 0
1 0 0 1
1 1 1
1 2
LCS : Example
y j D C A B
A B C B D x i
j 0 1 2 3 4 5
i
0 1 2 3 4 5
c( i, j ) = 1+c( i-1, j-1 )
max(c( i-1, j ) c( i, j-1 ))
0 if i=0 or j=0
if i, j > 0 and x i = y j if i, j > 0 and x i ≠ y j B
0 0 0 0 0
0 0 0 0 0 0 0
1 0 0 1
1 1 1
1 2
1 1 2 2 2
LCS : Example
y j D C A B
A B C B D x i
j 0 1 2 3 4 5
i
0 1 2 3 4 5
c( i, j ) = 1+c( i-1, j-1 )
max(c( i-1, j ) c( i, j-1 ))
0 if i=0 or j=0
if i, j > 0 and x i = y j if i, j > 0 and x i ≠ y j B
0 0 0 0 0
0 0 0 0 0 0 0 0 0
1
1 1 1
1 2
1 1 1 2 2 2
1 1 2 2 3
http://www.cp.eng.chula.ac.th/faculty/spj
LCS : Example
y j D C A B
A B C B D x i
j 0 1 2 3 4 5
i
0 1 2 3 4 5
c( i, j ) = 1+c( i-1, j-1 )
max(c( i-1, j ) c( i, j-1 ))
0 if i=0 or j=0
if i, j > 0 and x i = y j if i, j > 0 and x i ≠ y j B
0 0 0 0 0
0 0 0 0 0 0 0 0 0
1
1 1 1
1 2
1 1 1 2 2 2 1 1 2 2 3 1 2 2 2 3
http://www.cp.eng.chula.ac.th/faculty/spj
LCS : Example
y j D C A B
A B C B D x i
j 0 1 2 3 4 5
i
0 1 2 3 4 5
B 0 0 0 0 0
0 0 0 0 0 0 0 0 0
1
1 1 1
1 2
1 1 1 2 2 2 1 1 2 2 3 1 2 2 2 3
LCS : Analysis
Θ ( mn )
0 0
0
0 0 0 0
j 0 1 2 ... m
i
0 1 2 n
...
x x .... x
x x .... x
x x .... x