4. Emory University Logo Guidelines
-
Longest Common Subsequence
• “ABCDE”:
- Substring: {“A”,“BC”,“CDE”, …}.
2
5. Emory University Logo Guidelines
-
Longest Common Subsequence
• “ABCDE”:
- Substring: {“A”,“BC”,“CDE”, …}.
- Subsequence: {all substrings,“AC”,“ACE”, …}.
2
6. Emory University Logo Guidelines
-
Longest Common Subsequence
• “ABCDE”:
- Substring: {“A”,“BC”,“CDE”, …}.
- Subsequence: {all substrings,“AC”,“ACE”, …}.
- Not subsequence: {“BA”,“DAB”, …}
2
7. Emory University Logo Guidelines
-
Longest Common Subsequence
• “ABCDE”:
- Substring: {“A”,“BC”,“CDE”, …}.
- Subsequence: {all substrings,“AC”,“ACE”, …}.
- Not subsequence: {“BA”,“DAB”, …}
• Longest common subsequence
2
8. Emory University Logo Guidelines
-
Longest Common Subsequence
• “ABCDE”:
- Substring: {“A”,“BC”,“CDE”, …}.
- Subsequence: {all substrings,“AC”,“ACE”, …}.
- Not subsequence: {“BA”,“DAB”, …}
• Longest common subsequence
- The longest subsequence commonly shared by multiple strings.
2
9. Emory University Logo Guidelines
-
Longest Common Subsequence
• “ABCDE”:
- Substring: {“A”,“BC”,“CDE”, …}.
- Subsequence: {all substrings,“AC”,“ACE”, …}.
- Not subsequence: {“BA”,“DAB”, …}
• Longest common subsequence
- The longest subsequence commonly shared by multiple strings.
- e.g.,“baal” is a LCS of “bilabial” and “balaclava”.
2
10. Emory University Logo Guidelines
-
Longest Common Subsequence
• “ABCDE”:
- Substring: {“A”,“BC”,“CDE”, …}.
- Subsequence: {all substrings,“AC”,“ACE”, …}.
- Not subsequence: {“BA”,“DAB”, …}
• Longest common subsequence
- The longest subsequence commonly shared by multiple strings.
- e.g.,“baal” is a LCS of “bilabial” and “balaclava”.
- Can there be more than one LCS?
2
11. Emory University Logo Guidelines
-
Longest Common Subsequence
• “ABCDE”:
- Substring: {“A”,“BC”,“CDE”, …}.
- Subsequence: {all substrings,“AC”,“ACE”, …}.
- Not subsequence: {“BA”,“DAB”, …}
• Longest common subsequence
- The longest subsequence commonly shared by multiple strings.
- e.g.,“baal” is a LCS of “bilabial” and “balaclava”.
- Can there be more than one LCS?
2
blal → bilabial balaclava
blaa→ bilabial balaclava
12. Emory University Logo Guidelines
-
Longest Common Subsequence
• “ABCDE”:
- Substring: {“A”,“BC”,“CDE”, …}.
- Subsequence: {all substrings,“AC”,“ACE”, …}.
- Not subsequence: {“BA”,“DAB”, …}
• Longest common subsequence
- The longest subsequence commonly shared by multiple strings.
- e.g.,“baal” is a LCS of “bilabial” and “balaclava”.
- Can there be more than one LCS?
• Application
2
blal → bilabial balaclava
blaa→ bilabial balaclava
13. Emory University Logo Guidelines
-
Longest Common Subsequence
• “ABCDE”:
- Substring: {“A”,“BC”,“CDE”, …}.
- Subsequence: {all substrings,“AC”,“ACE”, …}.
- Not subsequence: {“BA”,“DAB”, …}
• Longest common subsequence
- The longest subsequence commonly shared by multiple strings.
- e.g.,“baal” is a LCS of “bilabial” and “balaclava”.
- Can there be more than one LCS?
• Application
- Find LCSs in DNA (e.g., GAATGTCCTTTCTCTAAGTCCTAAG).
2
blal → bilabial balaclava
blaa→ bilabial balaclava
14. Emory University Logo Guidelines
-
Abstract LCS
3
public abstract class AbstractLCS
{
/** @return a longest common sequence of the specific strings a and b. */
public String solve(String a, String b)
{
return solve(a.toCharArray(), b.toCharArray(), a.length()-1, b.length()-1);
}
protected abstract String solve(char[] c, char[] d, int i, int j);
}
15. Emory University Logo Guidelines
-
Abstract LCS
3
public abstract class AbstractLCS
{
/** @return a longest common sequence of the specific strings a and b. */
public String solve(String a, String b)
{
return solve(a.toCharArray(), b.toCharArray(), a.length()-1, b.length()-1);
}
protected abstract String solve(char[] c, char[] d, int i, int j);
}
16. Emory University Logo Guidelines
-
LCS - Recursive
4
A C G T C G T G T
C T A G T G G A G
0 1 2 3 4 5 6 7 8
17. Emory University Logo Guidelines
-
protected String solve(char[] c, char[] d, int i, int j)
{
if (i < 0 || j < 0)
return "";
if (c[i] == d[j])
return solve(c, d, i-1, j-1) + c[i];
String c1 = solve(c, d, i-1, j);
String d1 = solve(c, d, i, j-1);
return (c1.length() > d1.length()) ? c1 : d1;
}
LCS - Recursive
4
A C G T C G T G T
C T A G T G G A G
0 1 2 3 4 5 6 7 8
18. Emory University Logo Guidelines
-
protected String solve(char[] c, char[] d, int i, int j)
{
if (i < 0 || j < 0)
return "";
if (c[i] == d[j])
return solve(c, d, i-1, j-1) + c[i];
String c1 = solve(c, d, i-1, j);
String d1 = solve(c, d, i, j-1);
return (c1.length() > d1.length()) ? c1 : d1;
}
LCS - Recursive
4
A C G T C G T G T
C T A G T G G A G
0 1 2 3 4 5 6 7 8(8, 8)
19. Emory University Logo Guidelines
-
protected String solve(char[] c, char[] d, int i, int j)
{
if (i < 0 || j < 0)
return "";
if (c[i] == d[j])
return solve(c, d, i-1, j-1) + c[i];
String c1 = solve(c, d, i-1, j);
String d1 = solve(c, d, i, j-1);
return (c1.length() > d1.length()) ? c1 : d1;
}
LCS - Recursive
4
A C G T C G T G T
C T A G T G G A G
0 1 2 3 4 5 6 7 8(8, 8)
(7, 8)
20. Emory University Logo Guidelines
-
protected String solve(char[] c, char[] d, int i, int j)
{
if (i < 0 || j < 0)
return "";
if (c[i] == d[j])
return solve(c, d, i-1, j-1) + c[i];
String c1 = solve(c, d, i-1, j);
String d1 = solve(c, d, i, j-1);
return (c1.length() > d1.length()) ? c1 : d1;
}
LCS - Recursive
4
A C G T C G T G T
C T A G T G G A G
0 1 2 3 4 5 6 7 8(8, 8)
(7, 8) G
21. Emory University Logo Guidelines
-
protected String solve(char[] c, char[] d, int i, int j)
{
if (i < 0 || j < 0)
return "";
if (c[i] == d[j])
return solve(c, d, i-1, j-1) + c[i];
String c1 = solve(c, d, i-1, j);
String d1 = solve(c, d, i, j-1);
return (c1.length() > d1.length()) ? c1 : d1;
}
LCS - Recursive
4
A C G T C G T G T
C T A G T G G A G
0 1 2 3 4 5 6 7 8(8, 8)
(7, 8) G
(6, 7)
22. Emory University Logo Guidelines
-
protected String solve(char[] c, char[] d, int i, int j)
{
if (i < 0 || j < 0)
return "";
if (c[i] == d[j])
return solve(c, d, i-1, j-1) + c[i];
String c1 = solve(c, d, i-1, j);
String d1 = solve(c, d, i, j-1);
return (c1.length() > d1.length()) ? c1 : d1;
}
LCS - Recursive
4
A C G T C G T G T
C T A G T G G A G
0 1 2 3 4 5 6 7 8(8, 8)
(7, 8) G
(6, 7)
(0, 7)
...
23. Emory University Logo Guidelines
-
protected String solve(char[] c, char[] d, int i, int j)
{
if (i < 0 || j < 0)
return "";
if (c[i] == d[j])
return solve(c, d, i-1, j-1) + c[i];
String c1 = solve(c, d, i-1, j);
String d1 = solve(c, d, i, j-1);
return (c1.length() > d1.length()) ? c1 : d1;
}
LCS - Recursive
4
A C G T C G T G T
C T A G T G G A G
0 1 2 3 4 5 6 7 8(8, 8)
(7, 8) G
(6, 7)
(0, 7)
...
A
24. Emory University Logo Guidelines
-
protected String solve(char[] c, char[] d, int i, int j)
{
if (i < 0 || j < 0)
return "";
if (c[i] == d[j])
return solve(c, d, i-1, j-1) + c[i];
String c1 = solve(c, d, i-1, j);
String d1 = solve(c, d, i, j-1);
return (c1.length() > d1.length()) ? c1 : d1;
}
LCS - Recursive
4
A C G T C G T G T
C T A G T G G A G
0 1 2 3 4 5 6 7 8(8, 8)
(7, 8) G
(6, 7)
(0, 7)
...
A
(-1, 6)
25. Emory University Logo Guidelines
-
protected String solve(char[] c, char[] d, int i, int j)
{
if (i < 0 || j < 0)
return "";
if (c[i] == d[j])
return solve(c, d, i-1, j-1) + c[i];
String c1 = solve(c, d, i-1, j);
String d1 = solve(c, d, i, j-1);
return (c1.length() > d1.length()) ? c1 : d1;
}
LCS - Recursive
4
A C G T C G T G T
C T A G T G G A G
0 1 2 3 4 5 6 7 8(8, 8)
(7, 8) G
(6, 7)
(0, 7)
...
A
(-1, 6) A
26. Emory University Logo Guidelines
-
protected String solve(char[] c, char[] d, int i, int j)
{
if (i < 0 || j < 0)
return "";
if (c[i] == d[j])
return solve(c, d, i-1, j-1) + c[i];
String c1 = solve(c, d, i-1, j);
String d1 = solve(c, d, i, j-1);
return (c1.length() > d1.length()) ? c1 : d1;
}
LCS - Recursive
4
A C G T C G T G T
C T A G T G G A G
0 1 2 3 4 5 6 7 8(8, 8)
(7, 8) G
(6, 7)
(0, 7)
...
A
(-1, 6)
(1, 6)
A
27. Emory University Logo Guidelines
-
protected String solve(char[] c, char[] d, int i, int j)
{
if (i < 0 || j < 0)
return "";
if (c[i] == d[j])
return solve(c, d, i-1, j-1) + c[i];
String c1 = solve(c, d, i-1, j);
String d1 = solve(c, d, i, j-1);
return (c1.length() > d1.length()) ? c1 : d1;
}
LCS - Recursive
4
A C G T C G T G T
C T A G T G G A G
0 1 2 3 4 5 6 7 8(8, 8)
(7, 8) G
(6, 7)
(0, 7)
...
A
(-1, 6)
(1, 6)
(-1, 6)
A
...
28. Emory University Logo Guidelines
-
protected String solve(char[] c, char[] d, int i, int j)
{
if (i < 0 || j < 0)
return "";
if (c[i] == d[j])
return solve(c, d, i-1, j-1) + c[i];
String c1 = solve(c, d, i-1, j);
String d1 = solve(c, d, i, j-1);
return (c1.length() > d1.length()) ? c1 : d1;
}
LCS - Recursive
4
A C G T C G T G T
C T A G T G G A G
0 1 2 3 4 5 6 7 8(8, 8)
(7, 8) G
(6, 7)
(0, 7)
...
A
(-1, 6)
(1, 6)
(-1, 6)
A
...
(0, 5)
29. Emory University Logo Guidelines
-
protected String solve(char[] c, char[] d, int i, int j)
{
if (i < 0 || j < 0)
return "";
if (c[i] == d[j])
return solve(c, d, i-1, j-1) + c[i];
String c1 = solve(c, d, i-1, j);
String d1 = solve(c, d, i, j-1);
return (c1.length() > d1.length()) ? c1 : d1;
}
LCS - Recursive
4
A C G T C G T G T
C T A G T G G A G
0 1 2 3 4 5 6 7 8(8, 8)
(7, 8) G
(6, 7)
(0, 7)
...
A
(-1, 6)
(1, 6)
(-1, 6)
A
...
(0, 5)
(-1, 5)
...
30. Emory University Logo Guidelines
-
protected String solve(char[] c, char[] d, int i, int j)
{
if (i < 0 || j < 0)
return "";
if (c[i] == d[j])
return solve(c, d, i-1, j-1) + c[i];
String c1 = solve(c, d, i-1, j);
String d1 = solve(c, d, i, j-1);
return (c1.length() > d1.length()) ? c1 : d1;
}
LCS - Recursive
4
A C G T C G T G T
C T A G T G G A G
0 1 2 3 4 5 6 7 8(8, 8)
(7, 8) G
(6, 7)
(0, 7)
...
A
(-1, 6)
(1, 6)
(-1, 6)
A
...
(0, 5)
(-1, 5)
...
(0, 4)
31. Emory University Logo Guidelines
-
protected String solve(char[] c, char[] d, int i, int j)
{
if (i < 0 || j < 0)
return "";
if (c[i] == d[j])
return solve(c, d, i-1, j-1) + c[i];
String c1 = solve(c, d, i-1, j);
String d1 = solve(c, d, i, j-1);
return (c1.length() > d1.length()) ? c1 : d1;
}
LCS - Recursive
4
A C G T C G T G T
C T A G T G G A G
0 1 2 3 4 5 6 7 8(8, 8)
(7, 8) G
(6, 7)
(0, 7)
...
A
(-1, 6)
(1, 6)
(-1, 6)
A
...
(0, 5)
(-1, 5)
...
(0, 4)
(-1, 4)
32. Emory University Logo Guidelines
-
LCS - Dynamic Programming
5
A C G T C G T G T
C T A G T G G A G
0 1 2 3 4 5 6 7 8
33. Emory University Logo Guidelines
-
LCS - Dynamic Programming
5
final int N = c.length, M = d.length;
int[][] table = new int[N][M];
A C G T C G T G T
C T A G T G G A G
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
2 0 0 0 1 1 1 1 1 1
3 0 1 1 1 2 2 2 2 2
4 0 1 1 1 2 2 2 2 2
5 0 1 1 2 2 3 3 3 3
6 0 1 1 2 3 3 3 3 3
7 0 1 1 2 3 4 4 4 4
8 0 1 1 2 3 4 4 4 4
34. Emory University Logo Guidelines
-
LCS - Dynamic Programming
5
final int N = c.length, M = d.length;
int[][] table = new int[N][M];
A C G T C G T G T
C T A G T G G A G
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
2 0 0 0 1 1 1 1 1 1
3 0 1 1 1 2 2 2 2 2
4 0 1 1 1 2 2 2 2 2
5 0 1 1 2 2 3 3 3 3
6 0 1 1 2 3 3 3 3 3
7 0 1 1 2 3 4 4 4 4
8 0 1 1 2 3 4 4 4 4
for (int i=1; i<N; i++)
for (int j=1; j<M; j++)
{
table[i][j] = (c[i] == d[j])
? table[i-1][j-1] + 1
: Math.max(table[i-1][j],
table[i][j-1]);
}
35. Emory University Logo Guidelines
-
LCS - Dynamic Programming
5
final int N = c.length, M = d.length;
int[][] table = new int[N][M];
A C G T C G T G T
C T A G T G G A G
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
2 0 0 0 1 1 1 1 1 1
3 0 1 1 1 2 2 2 2 2
4 0 1 1 1 2 2 2 2 2
5 0 1 1 2 2 3 3 3 3
6 0 1 1 2 3 3 3 3 3
7 0 1 1 2 3 4 4 4 4
8 0 1 1 2 3 4 4 4 4
for (int i=1; i<N; i++)
for (int j=1; j<M; j++)
{
table[i][j] = (c[i] == d[j])
? table[i-1][j-1] + 1
: Math.max(table[i-1][j],
table[i][j-1]);
}
36. Emory University Logo Guidelines
-
LCS - Dynamic Programming
6
0 1 2 3 4 5 6 7 8
0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
2 0 0 0 1 1 1 1 1 1
3 0 1 1 1 2 2 2 2 2
4 0 1 1 1 2 2 2 2 2
5 0 1 1 2 2 3 3 3 3
6 0 1 1 2 3 3 3 3 3
7 0 1 1 2 3 4 4 4 4
8 0 1 1 2 3 4 4 4 4
if (i < 0 || j < 0)
return "";
if (c[i] == d[j])
return get(c, d, i-1, j-1, table) + c[i];
if (i == 0)
return get(c, d, i, j-1, table);
if (j == 0)
return get(c, d, i-1, j, table);
return (table[i-1][j] > table[i][j-1])
? get(c, d, i-1, j, table)
: get(c, d, i, j-1, table);
A C G T C G T G T
C T A G T G G A G
0 1 2 3 4 5 6 7 8
37. Emory University Logo Guidelines
-
LCS - Dynamic Programming
6
0 1 2 3 4 5 6 7 8
0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
2 0 0 0 1 1 1 1 1 1
3 0 1 1 1 2 2 2 2 2
4 0 1 1 1 2 2 2 2 2
5 0 1 1 2 2 3 3 3 3
6 0 1 1 2 3 3 3 3 3
7 0 1 1 2 3 4 4 4 4
8 0 1 1 2 3 4 4 4 4
if (i < 0 || j < 0)
return "";
if (c[i] == d[j])
return get(c, d, i-1, j-1, table) + c[i];
if (i == 0)
return get(c, d, i, j-1, table);
if (j == 0)
return get(c, d, i-1, j, table);
return (table[i-1][j] > table[i][j-1])
? get(c, d, i-1, j, table)
: get(c, d, i, j-1, table);
A C G T C G T G T
C T A G T G G A G
0 1 2 3 4 5 6 7 8
38. Emory University Logo Guidelines
-
LCS - Dynamic Programming
6
0 1 2 3 4 5 6 7 8
0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
2 0 0 0 1 1 1 1 1 1
3 0 1 1 1 2 2 2 2 2
4 0 1 1 1 2 2 2 2 2
5 0 1 1 2 2 3 3 3 3
6 0 1 1 2 3 3 3 3 3
7 0 1 1 2 3 4 4 4 4
8 0 1 1 2 3 4 4 4 4
if (i < 0 || j < 0)
return "";
if (c[i] == d[j])
return get(c, d, i-1, j-1, table) + c[i];
if (i == 0)
return get(c, d, i, j-1, table);
if (j == 0)
return get(c, d, i-1, j, table);
return (table[i-1][j] > table[i][j-1])
? get(c, d, i-1, j, table)
: get(c, d, i, j-1, table);
A C G T C G T G T
C T A G T G G A G
0 1 2 3 4 5 6 7 8
39. Emory University Logo Guidelines
-
LCS - Dynamic Programming
6
0 1 2 3 4 5 6 7 8
0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
2 0 0 0 1 1 1 1 1 1
3 0 1 1 1 2 2 2 2 2
4 0 1 1 1 2 2 2 2 2
5 0 1 1 2 2 3 3 3 3
6 0 1 1 2 3 3 3 3 3
7 0 1 1 2 3 4 4 4 4
8 0 1 1 2 3 4 4 4 4
if (i < 0 || j < 0)
return "";
if (c[i] == d[j])
return get(c, d, i-1, j-1, table) + c[i];
if (i == 0)
return get(c, d, i, j-1, table);
if (j == 0)
return get(c, d, i-1, j, table);
return (table[i-1][j] > table[i][j-1])
? get(c, d, i-1, j, table)
: get(c, d, i, j-1, table);
A C G T C G T G T
C T A G T G G A G
0 1 2 3 4 5 6 7 8
40. Emory University Logo Guidelines
-
LCS - Dynamic Programming
6
0 1 2 3 4 5 6 7 8
0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
2 0 0 0 1 1 1 1 1 1
3 0 1 1 1 2 2 2 2 2
4 0 1 1 1 2 2 2 2 2
5 0 1 1 2 2 3 3 3 3
6 0 1 1 2 3 3 3 3 3
7 0 1 1 2 3 4 4 4 4
8 0 1 1 2 3 4 4 4 4
if (i < 0 || j < 0)
return "";
if (c[i] == d[j])
return get(c, d, i-1, j-1, table) + c[i];
if (i == 0)
return get(c, d, i, j-1, table);
if (j == 0)
return get(c, d, i-1, j, table);
return (table[i-1][j] > table[i][j-1])
? get(c, d, i-1, j, table)
: get(c, d, i, j-1, table);
A C G T C G T G T
C T A G T G G A G
0 1 2 3 4 5 6 7 8
41. Emory University Logo Guidelines
-
LCS - Dynamic Programming
6
0 1 2 3 4 5 6 7 8
0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
2 0 0 0 1 1 1 1 1 1
3 0 1 1 1 2 2 2 2 2
4 0 1 1 1 2 2 2 2 2
5 0 1 1 2 2 3 3 3 3
6 0 1 1 2 3 3 3 3 3
7 0 1 1 2 3 4 4 4 4
8 0 1 1 2 3 4 4 4 4
if (i < 0 || j < 0)
return "";
if (c[i] == d[j])
return get(c, d, i-1, j-1, table) + c[i];
if (i == 0)
return get(c, d, i, j-1, table);
if (j == 0)
return get(c, d, i-1, j, table);
return (table[i-1][j] > table[i][j-1])
? get(c, d, i-1, j, table)
: get(c, d, i, j-1, table);
A C G T C G T G T
C T A G T G G A G
0 1 2 3 4 5 6 7 8
42. Emory University Logo Guidelines
-
LCS - Dynamic Programming
6
0 1 2 3 4 5 6 7 8
0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
2 0 0 0 1 1 1 1 1 1
3 0 1 1 1 2 2 2 2 2
4 0 1 1 1 2 2 2 2 2
5 0 1 1 2 2 3 3 3 3
6 0 1 1 2 3 3 3 3 3
7 0 1 1 2 3 4 4 4 4
8 0 1 1 2 3 4 4 4 4
if (i < 0 || j < 0)
return "";
if (c[i] == d[j])
return get(c, d, i-1, j-1, table) + c[i];
if (i == 0)
return get(c, d, i, j-1, table);
if (j == 0)
return get(c, d, i-1, j, table);
return (table[i-1][j] > table[i][j-1])
? get(c, d, i-1, j, table)
: get(c, d, i, j-1, table);
A C G T C G T G T
C T A G T G G A G
0 1 2 3 4 5 6 7 8
G
43. Emory University Logo Guidelines
-
LCS - Dynamic Programming
6
0 1 2 3 4 5 6 7 8
0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
2 0 0 0 1 1 1 1 1 1
3 0 1 1 1 2 2 2 2 2
4 0 1 1 1 2 2 2 2 2
5 0 1 1 2 2 3 3 3 3
6 0 1 1 2 3 3 3 3 3
7 0 1 1 2 3 4 4 4 4
8 0 1 1 2 3 4 4 4 4
if (i < 0 || j < 0)
return "";
if (c[i] == d[j])
return get(c, d, i-1, j-1, table) + c[i];
if (i == 0)
return get(c, d, i, j-1, table);
if (j == 0)
return get(c, d, i-1, j, table);
return (table[i-1][j] > table[i][j-1])
? get(c, d, i-1, j, table)
: get(c, d, i, j-1, table);
A C G T C G T G T
C T A G T G G A G
0 1 2 3 4 5 6 7 8
G
44. Emory University Logo Guidelines
-
LCS - Dynamic Programming
6
0 1 2 3 4 5 6 7 8
0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
2 0 0 0 1 1 1 1 1 1
3 0 1 1 1 2 2 2 2 2
4 0 1 1 1 2 2 2 2 2
5 0 1 1 2 2 3 3 3 3
6 0 1 1 2 3 3 3 3 3
7 0 1 1 2 3 4 4 4 4
8 0 1 1 2 3 4 4 4 4
if (i < 0 || j < 0)
return "";
if (c[i] == d[j])
return get(c, d, i-1, j-1, table) + c[i];
if (i == 0)
return get(c, d, i, j-1, table);
if (j == 0)
return get(c, d, i-1, j, table);
return (table[i-1][j] > table[i][j-1])
? get(c, d, i-1, j, table)
: get(c, d, i, j-1, table);
A C G T C G T G T
C T A G T G G A G
0 1 2 3 4 5 6 7 8
GT
45. Emory University Logo Guidelines
-
LCS - Dynamic Programming
6
0 1 2 3 4 5 6 7 8
0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
2 0 0 0 1 1 1 1 1 1
3 0 1 1 1 2 2 2 2 2
4 0 1 1 1 2 2 2 2 2
5 0 1 1 2 2 3 3 3 3
6 0 1 1 2 3 3 3 3 3
7 0 1 1 2 3 4 4 4 4
8 0 1 1 2 3 4 4 4 4
if (i < 0 || j < 0)
return "";
if (c[i] == d[j])
return get(c, d, i-1, j-1, table) + c[i];
if (i == 0)
return get(c, d, i, j-1, table);
if (j == 0)
return get(c, d, i-1, j, table);
return (table[i-1][j] > table[i][j-1])
? get(c, d, i-1, j, table)
: get(c, d, i, j-1, table);
A C G T C G T G T
C T A G T G G A G
0 1 2 3 4 5 6 7 8
GT
46. Emory University Logo Guidelines
-
LCS - Dynamic Programming
6
0 1 2 3 4 5 6 7 8
0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
2 0 0 0 1 1 1 1 1 1
3 0 1 1 1 2 2 2 2 2
4 0 1 1 1 2 2 2 2 2
5 0 1 1 2 2 3 3 3 3
6 0 1 1 2 3 3 3 3 3
7 0 1 1 2 3 4 4 4 4
8 0 1 1 2 3 4 4 4 4
if (i < 0 || j < 0)
return "";
if (c[i] == d[j])
return get(c, d, i-1, j-1, table) + c[i];
if (i == 0)
return get(c, d, i, j-1, table);
if (j == 0)
return get(c, d, i-1, j, table);
return (table[i-1][j] > table[i][j-1])
? get(c, d, i-1, j, table)
: get(c, d, i, j-1, table);
A C G T C G T G T
C T A G T G G A G
0 1 2 3 4 5 6 7 8
GTG
47. Emory University Logo Guidelines
-
LCS - Dynamic Programming
6
0 1 2 3 4 5 6 7 8
0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
2 0 0 0 1 1 1 1 1 1
3 0 1 1 1 2 2 2 2 2
4 0 1 1 1 2 2 2 2 2
5 0 1 1 2 2 3 3 3 3
6 0 1 1 2 3 3 3 3 3
7 0 1 1 2 3 4 4 4 4
8 0 1 1 2 3 4 4 4 4
if (i < 0 || j < 0)
return "";
if (c[i] == d[j])
return get(c, d, i-1, j-1, table) + c[i];
if (i == 0)
return get(c, d, i, j-1, table);
if (j == 0)
return get(c, d, i-1, j, table);
return (table[i-1][j] > table[i][j-1])
? get(c, d, i-1, j, table)
: get(c, d, i, j-1, table);
A C G T C G T G T
C T A G T G G A G
0 1 2 3 4 5 6 7 8
GTG
48. Emory University Logo Guidelines
-
LCS - Dynamic Programming
6
0 1 2 3 4 5 6 7 8
0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
2 0 0 0 1 1 1 1 1 1
3 0 1 1 1 2 2 2 2 2
4 0 1 1 1 2 2 2 2 2
5 0 1 1 2 2 3 3 3 3
6 0 1 1 2 3 3 3 3 3
7 0 1 1 2 3 4 4 4 4
8 0 1 1 2 3 4 4 4 4
if (i < 0 || j < 0)
return "";
if (c[i] == d[j])
return get(c, d, i-1, j-1, table) + c[i];
if (i == 0)
return get(c, d, i, j-1, table);
if (j == 0)
return get(c, d, i-1, j, table);
return (table[i-1][j] > table[i][j-1])
? get(c, d, i-1, j, table)
: get(c, d, i, j-1, table);
A C G T C G T G T
C T A G T G G A G
0 1 2 3 4 5 6 7 8
GTG
49. Emory University Logo Guidelines
-
LCS - Dynamic Programming
6
0 1 2 3 4 5 6 7 8
0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
2 0 0 0 1 1 1 1 1 1
3 0 1 1 1 2 2 2 2 2
4 0 1 1 1 2 2 2 2 2
5 0 1 1 2 2 3 3 3 3
6 0 1 1 2 3 3 3 3 3
7 0 1 1 2 3 4 4 4 4
8 0 1 1 2 3 4 4 4 4
if (i < 0 || j < 0)
return "";
if (c[i] == d[j])
return get(c, d, i-1, j-1, table) + c[i];
if (i == 0)
return get(c, d, i, j-1, table);
if (j == 0)
return get(c, d, i-1, j, table);
return (table[i-1][j] > table[i][j-1])
? get(c, d, i-1, j, table)
: get(c, d, i, j-1, table);
A C G T C G T G T
C T A G T G G A G
0 1 2 3 4 5 6 7 8
GTG
50. Emory University Logo Guidelines
-
LCS - Dynamic Programming
6
0 1 2 3 4 5 6 7 8
0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
2 0 0 0 1 1 1 1 1 1
3 0 1 1 1 2 2 2 2 2
4 0 1 1 1 2 2 2 2 2
5 0 1 1 2 2 3 3 3 3
6 0 1 1 2 3 3 3 3 3
7 0 1 1 2 3 4 4 4 4
8 0 1 1 2 3 4 4 4 4
if (i < 0 || j < 0)
return "";
if (c[i] == d[j])
return get(c, d, i-1, j-1, table) + c[i];
if (i == 0)
return get(c, d, i, j-1, table);
if (j == 0)
return get(c, d, i-1, j, table);
return (table[i-1][j] > table[i][j-1])
? get(c, d, i-1, j, table)
: get(c, d, i, j-1, table);
A C G T C G T G T
C T A G T G G A G
0 1 2 3 4 5 6 7 8
GTGT
51. Emory University Logo Guidelines
-
LCS - Dynamic Programming
6
0 1 2 3 4 5 6 7 8
0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
2 0 0 0 1 1 1 1 1 1
3 0 1 1 1 2 2 2 2 2
4 0 1 1 1 2 2 2 2 2
5 0 1 1 2 2 3 3 3 3
6 0 1 1 2 3 3 3 3 3
7 0 1 1 2 3 4 4 4 4
8 0 1 1 2 3 4 4 4 4
if (i < 0 || j < 0)
return "";
if (c[i] == d[j])
return get(c, d, i-1, j-1, table) + c[i];
if (i == 0)
return get(c, d, i, j-1, table);
if (j == 0)
return get(c, d, i-1, j, table);
return (table[i-1][j] > table[i][j-1])
? get(c, d, i-1, j, table)
: get(c, d, i, j-1, table);
A C G T C G T G T
C T A G T G G A G
0 1 2 3 4 5 6 7 8
GTGT
52. Emory University Logo Guidelines
-
LCS - Dynamic Programming
6
0 1 2 3 4 5 6 7 8
0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
2 0 0 0 1 1 1 1 1 1
3 0 1 1 1 2 2 2 2 2
4 0 1 1 1 2 2 2 2 2
5 0 1 1 2 2 3 3 3 3
6 0 1 1 2 3 3 3 3 3
7 0 1 1 2 3 4 4 4 4
8 0 1 1 2 3 4 4 4 4
if (i < 0 || j < 0)
return "";
if (c[i] == d[j])
return get(c, d, i-1, j-1, table) + c[i];
if (i == 0)
return get(c, d, i, j-1, table);
if (j == 0)
return get(c, d, i-1, j, table);
return (table[i-1][j] > table[i][j-1])
? get(c, d, i-1, j, table)
: get(c, d, i, j-1, table);
A C G T C G T G T
C T A G T G G A G
0 1 2 3 4 5 6 7 8
GTGT
53. Emory University Logo Guidelines
-
LCS - Dynamic Programming
6
0 1 2 3 4 5 6 7 8
0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
2 0 0 0 1 1 1 1 1 1
3 0 1 1 1 2 2 2 2 2
4 0 1 1 1 2 2 2 2 2
5 0 1 1 2 2 3 3 3 3
6 0 1 1 2 3 3 3 3 3
7 0 1 1 2 3 4 4 4 4
8 0 1 1 2 3 4 4 4 4
if (i < 0 || j < 0)
return "";
if (c[i] == d[j])
return get(c, d, i-1, j-1, table) + c[i];
if (i == 0)
return get(c, d, i, j-1, table);
if (j == 0)
return get(c, d, i-1, j, table);
return (table[i-1][j] > table[i][j-1])
? get(c, d, i-1, j, table)
: get(c, d, i, j-1, table);
A C G T C G T G T
C T A G T G G A G
0 1 2 3 4 5 6 7 8
GTGTC
54. Emory University Logo Guidelines
-
LCS - Dynamic Programming
6
0 1 2 3 4 5 6 7 8
0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
2 0 0 0 1 1 1 1 1 1
3 0 1 1 1 2 2 2 2 2
4 0 1 1 1 2 2 2 2 2
5 0 1 1 2 2 3 3 3 3
6 0 1 1 2 3 3 3 3 3
7 0 1 1 2 3 4 4 4 4
8 0 1 1 2 3 4 4 4 4
if (i < 0 || j < 0)
return "";
if (c[i] == d[j])
return get(c, d, i-1, j-1, table) + c[i];
if (i == 0)
return get(c, d, i, j-1, table);
if (j == 0)
return get(c, d, i-1, j, table);
return (table[i-1][j] > table[i][j-1])
? get(c, d, i-1, j, table)
: get(c, d, i, j-1, table);
A C G T C G T G T
C T A G T G G A G
0 1 2 3 4 5 6 7 8
GTGTC
55. Emory University Logo Guidelines
-
LCS - Dynamic Programming
6
0 1 2 3 4 5 6 7 8
0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
2 0 0 0 1 1 1 1 1 1
3 0 1 1 1 2 2 2 2 2
4 0 1 1 1 2 2 2 2 2
5 0 1 1 2 2 3 3 3 3
6 0 1 1 2 3 3 3 3 3
7 0 1 1 2 3 4 4 4 4
8 0 1 1 2 3 4 4 4 4
if (i < 0 || j < 0)
return "";
if (c[i] == d[j])
return get(c, d, i-1, j-1, table) + c[i];
if (i == 0)
return get(c, d, i, j-1, table);
if (j == 0)
return get(c, d, i-1, j, table);
return (table[i-1][j] > table[i][j-1])
? get(c, d, i-1, j, table)
: get(c, d, i, j-1, table);
A C G T C G T G T
C T A G T G G A G
0 1 2 3 4 5 6 7 8
GTGTC
Complexity?
56. Emory University Logo Guidelines
-
Agenda
• Exercise
- https://github.com/emory-courses/cs323/wiki/Dynamic-Programming
• Reading
- http://en.wikipedia.org/wiki/Knapsack_problem
7