public void nussinov(){ int total_max; int current_max; int j; int len = sequence.length(); int index; for(int k = 5; k total_max) index = i; for(int t=i; t<=j; t++){ if(t < j-4 && valid(t,j) == 1){ try { var2 = OPT[i][t-1]; } catch (ArrayIndexOutOfBoundsException e) { var2 = 0; } try { var3 = OPT[t+1][j-1]; } catch (ArrayIndexOutOfBoundsException e) { var3 = 0; } current_max = var2+var3+1; if(current_max > total_max){ total_max = current_max; index = t; } } OPT[i][j] = total_max; if(index < len) TRC2[j][i] = index; else TRC2[j][i] = -1; } } } } public void backtrack(int i, int j){ int k; k = TRC2[j][i]; if(k != -1) { TRC[k] = "("; TRC[j] = ")"; System.out.print(" p "); if( 4 < (j-1)-(k+1) ) backtrack(k+1,j-1); if (4 < k-1-i ) backtrack(i,k-1); } else{ // k==-1 if( 4 < j-1-i ) backtrack(i,j-1); } }