介绍
这篇文章将为大家详细讲解有关java如何实现基因序列比较,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
设计算法,计算两给定基因序列的相似程度。
人类基因由4种核苷酸,分别用字母代理表示。要求编写一个程序,按以下规则比较两个基因序列并确定它们的相似程度。即给出两个基因序列AGTGATG和GTTAG,它们有多相似呢?测量两个基因相似度的一种方法称为对齐。使用对齐方法可以在基因的适当位置加入空格,让两个基因的长度相等,然后根据基因的分值矩阵计算分数。
看了很多代码基本上都是用c++或者c写的,但是习惯性写java就用java实现一下
基本的思路就是,和背包问题差不多,实现还是模仿填表的形式去实现的
表达式:
- <李>
s1=结果(张)(j - 1) + getScore (X[我],[j])这个是X, Y序列使用坐标匹配
李> <李>s2=结果(张)[j] + getScore (X[我],' & # 39;)这个是X序列匹配Y的' & # 39;
李> <李>s3=结果[我][j - 1] + getScore (& # 39; & # 39;, Y [j])这个是Y序列匹配X的' & # 39;
李> <李>结果[我][j]=max (s1, s2、s3)找出三个中最大的就是所求的值
package algorithmClassSet.three; import java.util.HashMap; import java.util.Map;/* *=,* s1 结果(张)(j - 1), +, getScore (X[我],,Y [j]),这个是X, Y序列使用坐标匹配=,* s2 结果(张)[j], +, getScore (X[我],& # 39;& # 39;),,这个是X序列匹配y的,”& # 39;=,* s3 结果[我][j - 1], +, getScore (& # 39; & # 39;,, Y [j]),这个是Y序列匹配x的,”& # 39; 结果,*[我][j],=,马克斯(s1, s2、s3),,找出三个中最大的就是所求的值 ,* m * n ,*/public class  GeneSequenceComparison { public 才能;static  void main (String [], args), { ,,,dealIt (); ,,} private 才能static void  dealIt (), { ,,,String [], X =, {“A",,“G",,“T",,“G",,“A",,“T",,“G"}; ,,,String [], Y =, {“G",,“T",,“T",,“A",,“G"}; ,,,int m =, X.length +, 1; ,,,int n =, Y.length +, 1; ,,,int [] [], result =, new int [m] [n]; ,,,for (int 小姐:=,1;,小姐:& lt;,,,我+ +),{ ,,,,,结果[我][0],=,结果[小姐,安康;1][0],+,getScore (X[小姐,安康;1],“产生绯闻;); ,,,} ,,,for (int j =, 1,, j & lt;, n;, j + +), { ,,,,,结果[0][j],=,结果[0][j 安康;1],+,getScore(“产生绯闻;,,Y [j 作用;1]); ,,,} ,,,for (int 小姐:=,1;,小姐:& lt;,,,我+ +),{ ,,,,,for (int j =, 1,, j & lt;, n;, j + +), { ,,,,,,,int s1 =,结果[小姐,安康;1][j 安康;1],+,getScore (X[小姐,安康;1],,Y [j 安康;1]); ,,,,,,,int s2 =,结果[小姐,安康;1][j], +, getScore (X[小姐,安康;1],“产生绯闻;); ,,,,,,,int s3 =,结果[我][j 安康;1],+,getScore(“产生绯闻;,,Y [j 作用;1]); ,,,,,,,int maxs =, getMax (s1, s2, s3); ,,,,,,,结果[我][j],=, max; ,,,,,} ,,,} ,,,System.out.println(“结果为:“,+,结果[m 安康;1][n 作用;1]); ,,,for (int 小姐:=,0;,小姐:& lt;,,,我+ +),{ ,,,,,for (int j =, 0;, j & lt;, n;, j + +), { ,,,,,,,System.out.print(结果[我][j], +,“,“); ,,,,,} ,,,,,System.out.println (); ,,,} ,,} private 才能static int  getMax (int , s1, int s2, int s3), { ,,,int flag =, s1; ,,,if (flag & lt;, s2), { ,,,,,flag =, s2; ,,,} ,,,if (flag & lt;, s3), { ,,,,,flag =, s3; ,,,} ,,,return 旗帜; ,,}//传才能入值获取分数 private 才能static int  getScore (String x,, String y), { ,,,//x和y必须属于,ACGT - null null null null null null null null null null null null null null nulljava如何实现基因序列比较