java实现基因序列比较的示例代码
作者:※回不去× 时间:2022-01-03 02:32:22
设计算法,计算两给定基因序列的相似程度。
人类基因由4种核苷酸,分别用字母ACTG表示。要求编写一个程序,按以下规则比较两个基因序列并确定它们的相似程度。即给出两个基因序列AGTGATG和GTTAG,它们有多相似呢?测量两个基因相似度的一种方法称为对齐。使用对齐方法可以在基因的适当位置加入空格,让两个基因的长度相等,然后根据基因的分值矩阵计算分数。
看了很多代码基本上都是用c++或者c写的,但是习惯性写java就用java实现一下
基本的思路就是,和背包问题差不多,实现还是模仿填表的形式去实现的
表达式:
s1 = result[i-1][j-1] + getScore(X[i], Y[j]) 这个是x,y序列使用坐标匹配
s2 = result[i-1][j] + getScore(X[i], ‘-') 这个是x序列匹配y的 ‘-'
s3 = result[i][j-1] + getScore('-', Y[j]) 这个是y序列匹配x的 ‘-'
result[i][j] = max(s1,s2,s3) 找出三个中最大的就是所求的值
package algorithmClassSet.three;
import java.util.HashMap;
import java.util.Map;
/**
* s1 = result[i-1][j-1] + getScore(X[i], Y[j]) 这个是x,y序列使用坐标匹配
* s2 = result[i-1][j] + getScore(X[i], '-') 这个是x序列匹配y的 ‘-'
* s3 = result[i][j-1] + getScore('-', Y[j]) 这个是y序列匹配x的 ‘-'
* result[i][j] = max(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 i = 1; i < m; i++) {
result[i][0] = result[i - 1][0] + getScore(X[i - 1], "-");
}
for (int j = 1; j < n; j++) {
result[0][j] = result[0][j - 1] + getScore("-", Y[j - 1]);
}
for (int i = 1; i < m; i++) {
for (int j = 1; j < n; j++) {
int s1 = result[i - 1][j - 1] + getScore(X[i - 1], Y[j - 1]);
int s2 = result[i - 1][j] + getScore(X[i - 1], "-");
int s3 = result[i][j - 1] + getScore("-", Y[j - 1]);
int maxs = getMax(s1, s2, s3);
result[i][j] = maxs;
}
}
System.out.println("结果为:" + result[m - 1][n - 1]);
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
System.out.print(result[i][j] + " ");
}
System.out.println();
}
}
private static int getMax(int s1, int s2, int s3) {
int flag = s1;
if (flag < s2) {
flag = s2;
}
if (flag < s3) {
flag = s3;
}
return flag;
}
//传入值获取分数
private static int getScore(String x, String y) {
//x和y必须属于 ACGT-
Map<String, Integer> map = new HashMap<>();
map.put("A", 0);
map.put("C", 1);
map.put("G", 2);
map.put("T", 3);
map.put("-", 4);
int[][] score = {
{5, -1, -2, -1, -3},
{-1, 5, -3, -2, -4},
{-2, -3, 5, -2, -2},
{-1, -2, -2, 5, -1},
{-3, -4, -2, -1, -10000000}};
return score[map.get(x)][map.get(y)];
}
}
来源:https://blog.csdn.net/qq_45049981/article/details/104414059
标签:java,基因序列
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
关于Java中BeanMap进行对象与Map的相互转换问题
2023-09-18 07:25:36
Android 资源 id详解及的动态获取
2023-06-25 00:32:21
mybatis-plus自动填充插入更新时间有8小时时差
2021-07-26 07:18:40
![](https://img.aspxhome.com/file/2023/7/74767_0s.png)
Android Flutter实现仿闲鱼动画效果
2023-07-15 15:32:47
![](https://img.aspxhome.com/file/2023/3/87323_0s.jpg)
使用springCloud+nacos集成seata1.3.0搭建过程
2022-06-19 02:48:47
![](https://img.aspxhome.com/file/2023/7/63397_0s.png)
C#异步调用实例小结
2023-07-16 10:31:03
C++实现LeetCode(2.两个数字相加)
2023-06-23 16:51:11
Seata AT模式如何实现行锁详解
2022-11-18 23:43:34
![](https://img.aspxhome.com/file/2023/3/62473_0s.png)
java实现通讯录管理系统
2021-07-02 00:19:53
![](https://img.aspxhome.com/file/2023/2/71232_0s.jpg)
分析HashMap 的 JDK 源码
2022-01-17 06:29:54
![](https://img.aspxhome.com/file/2023/4/68164_0s.jpg)
C#自定义针对URL地址的处理类实例
2022-09-12 16:54:02
Java获取字符串编码格式实现思路
2023-08-14 12:35:38
java的io操作(将字符串写入到txt文件中)
2022-05-28 22:59:23
微信随机生成红包金额算法java版
2023-07-27 16:01:39
C#线程同步的三类情景分析
2023-01-07 22:38:04
详解从零开始---用C#制作扫雷游戏
2022-06-14 13:33:12
![](https://img.aspxhome.com/file/2023/9/70399_0s.png)
Java实现简单的飞机大战游戏(控制主飞机篇)
2023-11-14 13:52:56
Java探索之Thread+IO文件的加密解密代码实例
2023-01-26 19:07:03
Android植物大战僵尸小游戏
2023-08-05 21:27:04
![](https://img.aspxhome.com/file/2023/7/86017_0s.png)
使用IDEA创建servlet JavaWeb 应用及使用Tomcat本地部署的实现
2023-09-11 06:04:09
![](https://img.aspxhome.com/file/2023/4/57814_0s.jpg)