java实现基因序列比较的示例代码

 更新时间:2020年02月21日 14:23:24   作者:※回不去×  
这篇文章主要介绍了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)];
  }
}

到此这篇关于java实现基因序列比较的示例代码的文章就介绍到这了,更多相关java 基因序列比较内容请搜素脚本之家以前的文章或下面相关文章,希望大家以后多多支持脚本之家!

相关文章

  • Java并发编程之线程中断

    Java并发编程之线程中断

    这篇文章主要介绍了Java并发编程线程中断,java线程中断是一种线程间的协作模式,通过设置线程的中断标志并不能直接终止该线程的运行,而是被中断的线程根据中断状态自行处理,需要的朋友可以参考一下
    2021-09-09
  • SpringMVC Tomcat控制台乱码问题解决方案

    SpringMVC Tomcat控制台乱码问题解决方案

    这篇文章主要介绍了SpringMVC Tomcat控制台乱码问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • Java彻底消灭if-else的8种方案

    Java彻底消灭if-else的8种方案

    这篇文章主要给大家介绍了关于Java彻底消灭if-else的8种方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • 详解Java利用实现对称加密(DES、3DES、AES)

    详解Java利用实现对称加密(DES、3DES、AES)

    本篇文章主要介绍了Java利用实现对称加密(DES、3DES、AES),具有一定的参考价值,有兴趣的可以了解一下。
    2017-01-01
  • SpringBoot测试配置属性与web启动环境超详细图解

    SpringBoot测试配置属性与web启动环境超详细图解

    Web开发的核心内容主要包括内嵌的Servlet容器和SpringMVCSpringBoot使用起来非常简洁,大部分配置都有SpringBoot自动装配,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-10-10
  • Java算法真题详解运用单调栈

    Java算法真题详解运用单调栈

    一般使用单调栈无非两个方向,单调递减,单调递增。单调递增栈:存进去的数据都是增加的,碰到减少的时候,这时就要进行操作了。单调递减栈:存进去的数据都是减少的,碰到增加的时候,这时就要进行操作了,下面我们在真题中运用它
    2022-07-07
  • 浅析Java虚拟机详解之概述、对象生存法则

    浅析Java虚拟机详解之概述、对象生存法则

    这篇文章主要介绍了Java虚拟机详解之概述、对象生存法则,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • mybatis-plus主键生成策略

    mybatis-plus主键生成策略

    这篇文章主要介绍了mybatis-plus主键生成策略,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • Java的ConcurrentHashMap中不能存储null的原因解析

    Java的ConcurrentHashMap中不能存储null的原因解析

    众所周知,在Java中Map可以存储null,而ConcurrentHashMap不能存储null值,那么为什么呢?今天通过源码分析给大家详细解读,感兴趣的朋友一起看看吧
    2022-07-07
  • idea项目启动报错,日志包冲突slf4j和logback冲突问题

    idea项目启动报错,日志包冲突slf4j和logback冲突问题

    遇到SLF4J冲突时,可以尝试移除冲突的绑定或调整项目依赖,具体方法包括删除多余的Logger绑定库,如Logback或Log4j,或在项目配置文件中明确指定使用的日志框架,若使用WebLogic服务器,需在weblogic.xml中进行特定配置,适当调整pom.xml文件中的依赖版本也可能解决问题
    2024-09-09

最新评论