자바 유전자 서열 비교 예시 코드

설계 알고리즘 은 두 주어진 유전자 서열 의 유사 도 를 계산한다.
인간 유전 자 는 알파벳 ACTG 로 각각 표시 되 는 뉴 클 레오 티 드 4 종이 다.다음 규칙 에 따라 두 유전자 서열 을 비교 하고 비슷 한 정 도 를 확인 하 는 프로그램 을 만들어 야 합 니 다.즉,두 유전자 서열 을 제시 하 는 AGTGATG 와 GTTAG 는 얼마나 비슷 할 까?두 유전자 의 싱크로 율 을 측정 하 는 방법 을 정렬 이 라 고 한다.정렬 방법 을 사용 하면 유전자 의 적당 한 위치 에 빈 칸 을 넣 어 두 유전자 의 길 이 를 같 게 한 다음 유전자 의 수치 행렬 에 따라 점 수 를 계산 할 수 있다.
많은 코드 를 보 았 는데 기본적으로 c++또는 c 로 썼 지만 습관 적 으로 자바 를 쓰 면 자바 로 이 루어 집 니 다.

기본 적 인 사 고 는 가방 문제 와 차이 가 많 지 않 고 실현 하 느 냐,아니면 표 작성 형식 을 모방 하여 실현 하 느 냐 하 는 것 이다.
표현 식:
  • 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)];
      }
    }

    자바 유전자 서열 비교 에 관 한 예제 코드 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 자바 유전자 서열 비교 내용 은 우리 의 이전 글 이나 아래 관련 글 을 찾 아 보 세 요.앞으로 많은 응원 바 랍 니 다!

    좋은 웹페이지 즐겨찾기