//--------------------------------------------------------------------------- #include "common_cor.h" #include "corr.hh" #define MAXPATH 256 #define min(x,y) ((xy)?(x):(y)) Weight Corr::ed(int i,int j) { if(i==-1) return (j+1)*CL.cor_stdcor; // moje* Nie wiem czy tak będzie dobrze, ale uznałem, że poza tablicą powinny być wartosci przemnożone przez wagę standardowej zmiany litery if(j==-1) return (i+1)*CL.cor_stdcor; // moje* if(i==-2 || j==-2) return (n+1)*CL.cor_stdcor; // moje* if(X[i]==Y[j]) return min(H2[i-1][j-1], min(CL.cor_stdcor+min(H2[i][j-1],H2[i-1][j]),CL.GetValue(X,Y,H2,i,j))); if(X[i-1]==Y[j] && X[i]==Y[j-1]) return min(min(CL.cor_xchg+H2[i-2][j-2],CL.cor_stdcor+min(H2[i][j-1],H2[i-1][j])), CL.GetValue(X,Y,H2,i,j)); return min(CL.cor_stdcor+min(H2[i-1][j-1],min(H2[i][j-1],H2[i-1][j])), CL.GetValue(X,Y,H2,i,j)); /* // wersja z wagami ale dla floatów if(X[i]==Y[j])//zielone-> <- niebieskie -> <- rózowe -> return min(H2[i-1][j-1], min(1+min(H2[i][j-1],H2[i-1][j]),CL.GetValue(X,Y,H2,i,j))); if(X[i-1]==Y[j] && X[i]==Y[j-1]) return min(1+min(H2[i-2][j-2],min(H2[i][j-1],H2[i-1][j])), CL.GetValue(X,Y,H2,i,j)); return min(1+min(H2[i-1][j-1],min(H2[i][j-1],H2[i-1][j])), CL.GetValue(X,Y,H2,i,j)); */ /* // normalna wersja if(X[i]==Y[j]) return H2[i-1][j-1]; if(X[i-1]==Y[j] && X[i]==Y[j-1]) return 1+min(H2[i-2][j-2],min(H2[i][j-1],H2[i-1][j])); return 1+min(H2[i-1][j-1],min(H2[i][j-1],H2[i-1][j])); */ /* if(X[i]==Y[j]) return H[(i-1)+2][(j-1)+2]; if(X[i-1]==Y[j] && X[i]==Y[j-1]) return 1+min(H[(i-2)+2][(j-2)+2],min(H[(i)+2][(j-1)+2],H[(i-1)+2][(j)+2])); return 1+min(H[(i-1)+2][(j-1)+2],min(H[(i)+2][(j-1)+2],H[(i-1)+2][(j)+2])); */ } int Corr::load2(char *Name) // moje { return CL.loadCWL(Name); } Weight Corr::cuted(int j) { int l=max(0,j-t); int u=min(m,j+t); Weight ce=(j+t)*PREC; // moje* for(int k=l;k<=u;k++) { if(H2[k][j]0) j--; else more=0; while(more && !continued(path[j])); state=path[j]+1; } return count; } //---------------------------------------------------------------------------