多语言展示
当前在线:261今日阅读:113今日分享:31

Needleman Wusch算法全局比对(Java)

Needleman Wusch算法是经典的全局比对算法,用于比对两条DNA序列或者蛋白质序列的同源性或者说相似性,不过这两者的概念有所不同。本例使用Java对该算法进行实现,并且返回一个最优结果。作为对该算法的学习以及理解有所帮助。
工具/原料
1

Java

2

Netbean

方法/步骤
2

该代码对回溯步骤进行简化,仅返回一个最优解,但是该方法简单,适合初级编程者,自学所用。源代码:/*Needleman Wunsch是一个全局比对算法,可用于DNA和蛋白质序列的全局比对*/public class Needleman_Wunsch {/*全局变量用于回溯是的指针*/    static int l=0;    public static void main(String[] args) {/*比对的两列字符串*/       String t='GCGCAATG';       String p ='GCCCTAGCG';/*创建H矩阵用于打分,成为打分矩阵,创建D矩阵用于回溯,成为指针矩阵或者方向矩阵*/       int tlen=t.length();       int plen=p.length();       int [][] h=new int[tlen+1][plen+1];       int [][] d=new int[tlen+1][plen+1];/*初始化矩阵,第一列或行为deletion后者insert,扣分2*/       for(int i=0;i<1;i++){           for(int j=0;j=0&&j>0){         int start = d[i][j];         switch(start){             case 1:sb.insert(0, t.charAt(i-1));i=i-1;break;             case 2:sb.insert(0, t.charAt(i-1));i=i-1;j=j-1;break;             case 3:sb.insert(0, '-');j=j-1;break;             case 4:sb.insert(0, t.charAt(i-1));i=i-1;j=j-1;break;             case 5:sb.insert(0, t.charAt(i-1));i=i-1;break;             case 6:sb.insert(0, t.charAt(i-1));i=i-1;j=j-1;break;             case 7:sb.insert(0, t.charAt(i-1));i=i-1;j=j-1;break;              }         }              String result =sb.toString();         return result;         }    }

3

结果分析:Target sequence:G C G C - A A T G Source sequence:G C C C T A G C G此结果为最优解之一。

注意事项
1

需要对该理论有深刻理解推荐阅读《生物信息学导论》

2

对Java基础编程扎实

推荐信息