reset password
Author Message
nshatok
Posts: 19
Posted 22:52 Aug 03, 2009 |

/**
 *
 * @author Natalia Shatokhina CS454
 *
 */
public class LCI {
    int [][] c;
  String [][] b;
    int m,n;
    String s1,s2;
    String x="", y="";
           public static void main(String [] args) {
    //           String s1= "FTFTALLLAVAV";
    //           String s2="FTAVLLAAV";
               String s1="AGACTAGTTAC";
               String s2= "CGAGACGT";
               LCI l= new LCI(s1, s2);
    }
    public LCI(String s1, String s2) {
        this.s1=s1;
        this.s2=s2;
        L();
        printLCI( m, n);
    }
   
    public void L () {
           m = s1.length();
           n = s2.length();
           c = new int[m+1][n+1];
           b= new String[m+1][n+1];
           for (int i = 1; i< m+1; i++)
               c[i][0]=0;
           for (int j = 0; j< n+1; j++)
               c[0][j]=0;
           for (int i = 1; i< m+1; i++)  {
               for (int j = 1; j< n+1; j++) {
                   if (s1.charAt(i-1)== s2.charAt(j-1)) {
                          c[i][j]=c[i-1][j-1]+1;
                          b[i][j]="diag";
    //                      System.out.println(b[i][j]);
                   }
                   else if (c[i-1][j]>=c[i][j-1]) {
                          c[i][j]=c[i-1][j];
                          b[i][j]="up";
    //                      System.out.println(b[i][j]);
                   }
                   else {
                         c[i][j]=c[i][j-1];
                         b[i][j]="left";
    //                     System.out.println(b[i][j]);
                   }                   
               }                  
           }
    }
    public String printLCI( int m1, int n1) {

        if (m1==0 || n1==0) {
            return null;
        }
      if (b[m1][n1].equals("diag")) {
               printLCI(m1-1, n1-1);
               System.out.print(s1.charAt(m1-1));
     
        }
      else if (b[m1][n1].equals("up")) {
           printLCI(m1-1, n1);
      }
      else  printLCI(m1, n1-1); { 
        return null;
      }
    }

}

xieguahu
Posts: 50
Posted 19:54 Aug 04, 2009 |

I run your program, the result is different from mine.

nshatok
Posts: 19
Posted 22:39 Aug 04, 2009 |

I think for those two strings:

FTFTALLLAVAV
FTAVLLAAV

LCI is FTALLAAV

What kind of result you are getting?

cysun
Posts: 2935
Posted 17:34 Aug 31, 2009 |
nshatok wrote:

I think for those two strings:

FTFTALLLAVAV
FTAVLLAAV

LCI is FTALLAAV

What kind of result you are getting?

You algorithm does sequence alignment, which is different from what the paper asks for.

nshatok
Posts: 19
Posted 22:36 Aug 31, 2009 |

I agree.

To my opininon,  it can be used to find longest common fragment as paper defines. Actually the algorithm prints all common fragments  in one line (FTA, LLA, AV). We can modify the program slightly to find the longest one that will be the fragment paper is talking about. Something like this:

import java.util.ArrayList;

/**
 *
 * @author Natalia Shatokhina CS454
 *
 */
public class LCI {
    int [][] c;
  String [][] b;
    int m,n;
    String s1,s2;


           public static void main(String [] args) {
        //       String s1= "FTFTALLLAVAV";
         //      String s2="FTAVLLAAV";
               String s1="AGACTAGTTAC";
               String s2= "CGAGACGT";
          //     String s1 = "1273";
          //     String s2="12412673";
               
               LCI l= new LCI(s1, s2);
    }
    public LCI(String s1, String s2) {
        this.s1=s1;
        this.s2=s2;
        L();
        printLCI( m, n);
      System.out.println(s);
      String fragments [] = s.split(" ");
      int count=0;
      String maxFragment="";
     
      for (int i = 0; i < fragments.length; i++)
            if (fragments[i].length() > count) {
                 count=fragments[i].length();
                 maxFragment=fragments[i];
            }
      System.out.println("Largest common fragment= "+ maxFragment+"\nSize of largest common fragment= "+ maxFragment.length());
   
    }
   
    public void L () {
           m = s1.length();
           n = s2.length();
           c = new int[m+1][n+1];
           b= new String[m+1][n+1];
           for (int i = 1; i< m+1; i++)
               c[i][0]=0;
           for (int j = 0; j< n+1; j++)
               c[0][j]=0;
           for (int i = 1; i< m+1; i++)  {
               for (int j = 1; j< n+1; j++) {
                   if (s1.charAt(i-1)== s2.charAt(j-1)) {
                          c[i][j]=c[i-1][j-1]+1;
                          b[i][j]="diag";
    //                      System.out.println(b[i][j]);
                   }
                   else if (c[i-1][j]>=c[i][j-1]) {
                          c[i][j]=c[i-1][j];
                          b[i][j]="up";
    //                      System.out.println(b[i][j]);
                   }
                   else {
                         c[i][j]=c[i][j-1];
                         b[i][j]="left";
    //                     System.out.println(b[i][j]);
                   }                   
               }                  
           }
    }
    String s = "";
    public String printLCI( int m1, int n1) {
   
        if (m1==0 || n1==0) {
           
            return null;
        }
       
      if (b[m1][n1].equals("diag")) {
           
               printLCI(m1-1, n1-1);
        //       System.out.print(s1.charAt(m1-1));
               s = s+s1.charAt(m1-1);

              
              
    //       x=x+s1.charAt(m1-1);     
        }
      else if (b[m1][n1].equals("up")) {
           
           printLCI(m1-1, n1);     
           s=s+" ";
      }
      else  {

          printLCI(m1, n1-1);
          s=s+" ";
      }
     
        return null;
     
    }

}