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 基因序列比较内容请搜素我们以前的文章或下面相关文章,希望大家以后多多支持我们!

(0)

相关推荐

  • Java比较两个List的值是否相等的方法

    本文实例讲述了Java比较两个List的值是否相等的方法.分享给大家供大家参考.具体如下: 假设两个队列 {1,2,3,4} 和 {4,3,2,1} ,这个方法用来比较这两个队列中包含的值是否相等 /** * 队列比较 * @param <T> * @param a * @param b * @return */ public static <T extends Comparable<T>> boolean compare(List<T> a, List&l

  • Java 中Comparable和Comparator区别比较

    Comparable 简介Comparable 是排序接口.若一个类实现了Comparable接口,就意味着"该类支持排序".  即然实现Comparable接口的类支持排序,假设现在存在"实现Comparable接口的类的对象的List列表(或数组)",则该List列表(或数组)可以通过 Collections.sort(或 Arrays.sort)进行排序.此外,"实现Comparable接口的类的对象"可以用作"有序映射(如Tre

  • 常用的java日期比较和日期计算方法小结

    本文为大家分享的都是常用的日期之间的比较方法,供以后参考. 热身:获取当前时间  SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式 String nowDate = df.format(new Date());// new Date()为获取当前系统时间 注:楼主一直以为date类型不如string类型随心所欲,所以下面的比较都是string类型的date进行比较.如果你真的真的就是那么

  • Java中如何比较两个数组中元素是否相同

    呵呵呵,实现Java比较两个数组中的元素是否相同的功能你是怎么做的?看下面最简单方法: 复制代码 代码如下: import java.util.Arrays; public class Test { /** * Java比较两个数组中的元素是否相同 */ public static void main(String[] args) { String [] array1 = {"1","2","3"}; String [] array2 = {&q

  • java中常用的字符串的比较方法(两种)

    比较字符串比较常用的两个方法是运算符"="和String的equals方法. 使用"="比较两个字符串,是比较两个对象的的"地址"是否一致,本质就是判断两个变量是否指向同一个对象,如果是则返回true,否则返回的是false.而String类的equals方法则是比较两个字符串的内容是否一致,返回值也是一个布尔类型. 看下面的代码: public class TestString{ public static void main(String[]

  • Java多线程的实现方式比较(两种方式比较)

    先看一下java线程运行时各个阶段的运行状态 线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源.一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行.由于线程之间的相互制约,致使线程在运行中呈现出间断性. 在引入线程的操作系统中,通常都是把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位.由于线程比进程更小,基本上不拥有系统资源,故对它的

  • JAVA比较两张图片相似度的方法

    本文实例讲述了JAVA比较两张图片相似度的方法.分享给大家供大家参考.具体如下: 摘要: importjava.awt.image.BufferedImage; importjava.io.File; importjavax.imageio.ImageIO; /***比较两张图片的相似度*@authorGuihua**/publicclassBMPLoader{//改变成二进制码 publicstaticString[][]getPX(Stringargs){int[]rgb=newint[3]

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

    设计算法,计算两给定基因序列的相似程度. 人类基因由4种核苷酸,分别用字母ACTG表示.要求编写一个程序,按以下规则比较两个基因序列并确定它们的相似程度.即给出两个基因序列AGTGATG和GTTAG,它们有多相似呢?测量两个基因相似度的一种方法称为对齐.使用对齐方法可以在基因的适当位置加入空格,让两个基因的长度相等,然后根据基因的分值矩阵计算分数. 看了很多代码基本上都是用c++或者c写的,但是习惯性写java就用java实现一下 基本的思路就是,和背包问题差不多,实现还是模仿填表的形式去实现的

  • Java连接postgresql数据库的示例代码

    本文介绍了Java连接postgresql数据库的示例代码,分享给大家,具体如下: 1.下载驱动jar 下载地址:https://jdbc.postgresql.org/download.html 2.导入jar包 新建lib文件夹,将下载的jar驱动包拖到文件夹中. 将jar驱动包添加到Libraries 3.程序代码如下:HelloWorld.java package test; import java.sql.Connection; import java.sql.DriverManage

  • java 生成文字图片的示例代码

    本文主要介绍了java 生成文字图片的示例代码,分享给大家,具体如下: import java.awt.Color; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.Rectangle; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO;

  • Java动态规划之编辑距离问题示例代码

    动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移.一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划. 动态规划实际上是一类题目的总称,并不是指某个固定的算法.动态规划的意义就是通过采用递推(或者分而治之)的策略,通过解决大问题的子问题从而解决整体的做法.动态规划的核心思想是巧妙的将问题拆分成多个子问题,通过计算子问题而得到整体问题的解.而子问题又可以拆分成更多的子问题,从而用类似递推迭代的方法解决要求的问题.问题描述: 对于序列S和T,

  • Java的静态类型检查示例代码详解

    关于静态类型检查和动态类型检查的解释: 静态类型检查:基于程序的源代码来验证类型安全的过程: 动态类型检查:在程序运行期间验证类型安全的过程: Java使用静态类型检查在编译期间分析程序,确保没有类型错误.基本的思想是不要让类型错误在运行期间发生. 在各色各样的编程语言中,总共存在着两个类型检查机制:静态类型检查和动态类型检查. 静态类型检查是指通过对应用程序的源码进行分析,在编译期间就保证程序的类型安全. 动态类型检查是在程序的运行过程中,验证程序的类型安全.在Java中,编译期间使用静态类型

  • Java随机生成身份证完整示例代码

    身份证算法实现 1.号码的结构 公民身份号码是特征组合码, 由十七位数字本体码和一位校验码组成. 排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码  三位数字顺序码和一位数字校验码. 2.地址码(前六位数) 表示编码对象常住户口所在县(市.旗.区)的行政区划代码,按GB/T2260的规定执行. 3.出生日期码(第七位至十四位) 表示编码对象出生的年.月.日,按GB/T7408的规定执行,年.月.日代码之间不用分隔符. 4.顺序码(第十五位至十七位) 表示在同一地址码所标识的区域范围内,

  • 用java实现跳动的小球示例代码

    实现效果为一个小球接触左右侧时,会反向的运动. import javafx.application.Application; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.paint.Colo

  • 在Java中操作Zookeeper的示例代码详解

    依赖 <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.6.0</version> </dependency> 连接到zkServer //连接字符串,zkServer的ip.port,如果是集群逗号分隔 String connectStr = "192.

  • Java 静态数据初始化的示例代码

    无论创建多少个对象,静态数据都只占用一份存储区域.static关键字不能应用于局部变量,因此它只能作用于域.如果一个域是静态的基本类型域,且也没有对它进行初始化,那么它就会获得基本类型的标准初始值:如果它是一个对象引用,那么它的默认初始值就是null class Bowl { public Bowl(int marker) { System.out.println("Bowl(" + marker + ")"); } void f1(int marker) { Sy

  • Java 设置Excel条件格式示例代码(高亮条件值、应用单元格值/公式/数据条等类型)

    概述 在Excel中,应用条件格式功能可以在很大程度上改进表格的设计和可读性,用户可以指定单个或者多个单元格区域应用一种或者多种条件格式.本篇文章,将通过Java程序示例介绍条件格式的设置方法,设置条件格式时,因不同设置需要,本文分别从以下示例要点来介绍: 示例1: 1. 应用条件格式用于高亮重复.唯一数值 2. 应用条件格式用于高亮峰值(最高值.最低值) 3. 应用条件格式用于高亮低于或高于平均值的数值 示例2: 1. 应用单元格值类型的条件格式 2. 应用公式类型的条件格式 3. 应用数据条

随机推荐