java实现基因序列比较的示例代码
作者:※回不去× 发布时间:2022-01-03 02:32:22
标签:java,基因序列
设计算法,计算两给定基因序列的相似程度。
人类基因由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


猜你喜欢
- 引言在Broker中,事务消息的初始化是通过BrokerController.initialTransaction()方法执行的。priva
- 在Unity中,一般的方法都是顺序执行的,一般的方法也都是在一帧中执行完毕的,当我们所写的方法需要耗费一定时间时,便会出现帧率下降,画面卡顿
- 一.OO(面向对象)的设计基础面向对象(OO):就是基于对象概念,以对象为中心,以类和继承为构造机制,充分利用接口和多态提供灵活性,来认识、
- 本文讲述在mybatis中如何使用ognl表达式实现动态组装sql语句新建Users实体类:public class Users { &nb
- Mybatis selectKey返回新增用户的id值一、需求:新增用户后,同时还要返回当前新增用户的id值id是由数据库的自动增长来实现的
- 权限上篇文章 Android 获取IP和UA中提及了获取WIFI的IP地址,本篇文章介绍下如何扫描WIFI。官方文档根据官方文档描述,扫描W
- 目录效果展示实现原理实现步骤完整代码展示效果展示实现原理首先需要生成绘制小花的坐标点,坐标点的横坐标是根据控件的宽度随机生成的,而纵坐标则设
- 前言:JSON 是轻量级的数据交换格式,很常用,尤其是在使用 Ajax 时,在后台将数据封装为 JSON 字符串更是常见。之前在做项目的时候
- LocalDate类第一种:直接生成当前时间 LocalDate date = LocalDate.now();
- 简介netty中的数据是通过ByteBuf来进行传输的,一个ByteBuf中可能包含多个有意义的数据,这些数据可以被称作frame,也就是说
- 通常情况下,Android实现自定义控件无非三种方式。Ⅰ、继承现有控件,对其控件的功能进行拓展。Ⅱ、将现有控件进行组合,实现功能更加强大控件
- Java 如何将String转化为Int在 Java 中要将 String 类型转化为 int 类型时,需要使用 Integer 类中的 p
- 自定义过滤器获取不到session根本原因,多个自定义过滤器执行顺序问题问题action请求中request对象为ShiroHttpServ
- 在项目中如果有些参数经常需要修改,或者后期可能需要修改,那我们最好把这些参数放到properties文件中,源代码中读取properties
- 一.添加控件IrisSkin2.dll。方法:  
- 有时候在单机部署,或者项目没有在IDea 开发工具中运行(idea可以自动打开tomcat项目),需要项目启动后自动打开浏览器访问项目,配置
- 目录Profile用法resourcesfilters多环境配置解决方案Profile用法我们在application.yml中为jdbc.
- 最近在折腾一些控制相关的软件设计,想起来状态机这个东西,对解决一些控制系统状态切换还是挺有用的。状态机(有限状态自动机)网上有很多介绍。简单
- MyBatis全局配置文件MyBatis 的配置文件包含了影响 MyBatis 行为甚深的设置(settings)和属性(propertie
- 本文实例为大家分享了一个基于JAVA的知乎爬虫,抓取知乎用户基本信息,基于HttpClient 4.5,供大家参考,具体内容如下详细内容:抓