----- 10/06/13 ----- > Faccio riferimento all'esercizio dell'esame del 15/06/10, > dove si chiede di applicare opportunamente la tecnica di memoization > su di un metodo definito in Java. > > Questo e' il codice: > > public static long f( int i, int j ) { // i, j ³ 0 > if ( i+j < 2 ) { > return i+j; > } else if ( j == 0 ) { > return f( 1, i-2 ) + f( 0, i-1 ); > } else if ( j == 1 ) { > return f( 0, i ) + f( i+1, 0 ); > } else { > return f( i+2, j-2 ) + f( i+1, j-1 ); > } > } > > E questo e' l'esercizio svolto: > > public static long fm( int i, int j ) { > long[][] h = new long[ i+j+1 ][]; > for ( int u=0; u h[u] = new long[ h.length-u ]; > for ( int v=0; v h[u][v] = UNKNOWN; > }} > return mem( i, j, h ); > } > > (continua...) > > Non riesco a capire perche' sia necessario costruire una matrice > con un vettore al suo interno. ----- Qualunque matrice e' appresentata come array di array. Poiche' nel caso in esame la matrice "utile" e' sostanzialmente triangolare, ho proposto una soluzione che alloca solo lo spazio necessario (o poco piu') creando righe di lunghezza variabile (anziche' tutte della stessa lunghezza). ----- * -----