Memoization in java on LCSX
Itry to understand the memoization, i tried different exercises. i have
some problem to use memoization on this program:
public static String[] lcsx(String u, String v) {
if (u.equals("") || v.equals("")) {
return new String[] { u, v };
} else if (u.charAt(0) == v.charAt(0)) {
return lcsx(u.substring(1), v.substring(1));
} else {
String[] pair1 = lcsx(u.substring(1), v);
String[] pair2 = lcsx(u, v.substring(1));
return better(u.charAt(0), v.charAt(0), pair1, pair2);
}
}
private static String[] better(char c0, char c1, String[] pair1,
String[] pair2) {
int e1 = pair1[0].length() + pair1[1].length();
int e2 = pair2[0].length() + pair2[1].length();
if (e1 < e2) {
return new String[] { c0 + pair1[0], pair1[1] };
} else if (e1 > e2) {
return new String[] { pair2[0], c1 + pair2[1] };
} else if (Math.random() < 0.5) {
return new String[] { c0 + pair1[0], pair1[1] };
} else {
return new String[] { pair2[0], c1 + pair2[1] };
}
}
This is what i try to do:
public static String[] llcsxMem( String u, String v ) {
int m = u.length();
int n = v.length();
long[][] value = new long[ m+1 ][ n+1 ];
for ( int i=0; i<=m; i=i+1 ) {
for ( int j=0; j<=n; j=j+1 ) {
answer[i][j] = UNKNOWN;
}}
return llcsxRec( u, v, answer );
}
private static Int llcsxRec( String u, String v, int[][] answer ) {
int i = u.length();
int j = v.length();
if ( answer[i][j] == UNKNOWN ) {
if ( u.equals("") || v.equals("") ) {
answer[i][j] = { u, v};
} else if ( u.charAt(0) == v.charAt(0) ) {
answer[i][j] = llcsxRec( u.substring(1), v.substring(1), answer );
} else {
String[] pair1 = lcsxMem( u.substring(1), v );
String[] pair2 = lcsxMem( u, v.substring(1) );
answer[i][j] = better( u.charAt(0), v.charAt(0), pair1, pair2 );
}}
return answer[i][j];
}
But i don't know if it's correct the last else in lcsxRec. Can someone
help me? Thanks in advance
No comments:
Post a Comment