Skip to content

Commit 9bdba51

Browse files
committed
added dynamic programming chapter
1 parent 8f94d03 commit 9bdba51

File tree

3 files changed

+135
-1
lines changed

3 files changed

+135
-1
lines changed

.gitignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1-
/Practice
1+
/Practice
2+
.idea/
3+
SummerTrainingGFG.iml
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package SummerTrainingGFG.DynamicProgramming;
2+
3+
import java.util.Arrays;
4+
/**
5+
* @author Vishal Singh
6+
*/
7+
public class FibonacciNumber {
8+
/*
9+
* Idea is to save those values which you have already computed
10+
* Memoization Top-Down */
11+
static int[] memoize;
12+
static int fibMemoization(int n){
13+
if (memoize[n] == -1){
14+
int res;
15+
if (n == 0 || n == 1){
16+
res = n;
17+
}else {
18+
res = fibMemoization(n-1) + fibMemoization(n-2);
19+
}
20+
memoize[n] = res;
21+
}
22+
return memoize[n];
23+
}
24+
/*
25+
* Faster than memoization
26+
* Tabulations Bottom - Up*/
27+
static int fibTabulation(int n){
28+
int[] f = new int[n+1];
29+
f[0] = 0;
30+
f[1] = 1;
31+
for (int i = 2; i <= n; i++) {
32+
f[i] = f[i-1] + f[i-2];
33+
}
34+
return f[n];
35+
}
36+
public static void main(String[] args) {
37+
int n = 6;
38+
memoize = new int[n+1];
39+
Arrays.fill(memoize,-1);
40+
System.out.println(fibMemoization(n));
41+
42+
System.out.println(fibTabulation(6));
43+
44+
}
45+
}
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
package SummerTrainingGFG.DynamicProgramming;
2+
3+
import java.lang.reflect.Array;
4+
import java.util.Arrays;
5+
6+
/**
7+
* @author Vishal Singh
8+
*/
9+
public class LongestCommonSubsequence {
10+
/*
11+
* Subsequence is picking some characters in same order but may not be contiguous
12+
* Substring means need to pick continuous characters
13+
* Subsequence of CDA -> "","C","D","A","CD","CA","DA","CDA"
14+
* 2^N POSSIBLE SUBSEQUENCE
15+
* Substring of CDA -> "","C","D","A","CD","DA","CDA"
16+
* LCS Of "ABCDGH" and "AEDFHR" is "ADH" length = 3
17+
* */
18+
19+
/*
20+
* RECURSIVE SOLUTION*/
21+
static int lcs(String s1, String s2, int m, int n) {
22+
if (m == 0 || n == 0) {
23+
return 0;
24+
}
25+
if (s1.charAt(m - 1) == s2.charAt(n - 1)) {
26+
return 1 + lcs(s1, s2, m - 1, n - 1);
27+
} else {
28+
return Math.max(lcs(s1, s2, m - 1, n), lcs(s1, s2, m, n - 1));
29+
}
30+
}
31+
32+
/*
33+
* MEMOIZATION - Theta(m*n)*/
34+
static int[][] memoize;
35+
36+
static int lcsMemoize(String s1, String s2, int m, int n) {
37+
if (memoize[m][n] != -1) {
38+
return memoize[m][n];
39+
}
40+
if (m == 0 || n == 0) {
41+
memoize[m][n] = 0;
42+
}
43+
if (s1.charAt(m - 1) == s2.charAt(n - 1)) {
44+
memoize[m][n] = 1 + lcs(s1, s2, m - 1, n - 1);
45+
} else {
46+
memoize[m][n] = Math.max(lcs(s1, s2, m - 1, n), lcs(s1, s2, m, n - 1));
47+
}
48+
return memoize[m][n];
49+
}
50+
/*
51+
* TABULATION - Theta(m*n)*/
52+
static int lcsTabulation(String s1,String s2){
53+
int m = s1.length();
54+
int n = s2.length();
55+
int[][] dp = new int[m+1][n+1];
56+
for (int i = 0; i <= m; i++) {
57+
dp[i][0] = 0;
58+
}
59+
for (int i = 0; i <= n; i++) {
60+
dp[0][i] = 0;
61+
}
62+
for (int i = 1; i <= m; i++) {
63+
for (int j = 1; j <= n; j++) {
64+
if (s1.charAt(i-1) == s2.charAt(j-1)){
65+
dp[i][j] = 1 + dp[i-1][j-1];
66+
}else {
67+
dp[i][j] = Math.max(dp[i-1][j],dp[i][j-1]);
68+
}
69+
}
70+
}
71+
return dp[m][n];
72+
}
73+
public static void main(String[] args) {
74+
System.out.println(lcs("axyz", "baz", 4, 3));
75+
76+
int m = 4;
77+
int n = 3;
78+
memoize = new int[m + 1][n + 1];
79+
for (int[] row : memoize) {
80+
Arrays.fill(row, -1);
81+
}
82+
System.out.println(lcsMemoize("axyz","baz",m,n));
83+
84+
System.out.println(lcsTabulation("axyz","baz"));
85+
86+
}
87+
}

0 commit comments

Comments
 (0)