Computer >> 컴퓨터 >  >> 프로그램 작성 >> Java

가장 긴 공통 부분 시퀀스를 위한 Java 프로그램

<시간/>

다음은 Longest Common Subsequence에 대한 Java 프로그램입니다 -

예시

public class Demo{
   int subseq(char[] a, char[] b, int a_len, int b_len){
      int my_arr[][] = new int[a_len + 1][b_len + 1];
      for (int i = 0; i <= a_len; i++){
         for (int j = 0; j <= b_len; j++){
            if (i == 0 || j == 0)
            my_arr[i][j] = 0;
            else if (a[i - 1] == b[j - 1])
            my_arr[i][j] = my_arr[i - 1][j - 1] + 1;
            else
            my_arr[i][j] = max_val(my_arr[i - 1][j], my_arr[i][j - 1]);
         }
      }
      return my_arr[a_len][b_len];
   }
   int max_val(int val_1, int val_2){
      return (val_1 > val_2) ? val_1 : val_2;
   }
   public static void main(String[] args){
      Demo my_inst = new Demo();
      String my_str_1 = "MNSQR";
      String my_str_2 = "PSQR";
      char[] a = my_str_1.toCharArray();
      char[] b = my_str_2.toCharArray();
      int a_len = a.length;
      int b_len = b.length;
      System.out.println("The length of the longest common subsequence is"+ " " + my_inst.subseq(a, b, a_len,       b_len));
   }
}

출력

The length of the longest common subsequence is 3

Demo라는 클래스에는 주어진 문자열, 즉 str_1[0 to len(str_1-1) , str_2(0 to len(str_2-1) //2 'for' 루프)에 대해 가장 긴 공통 부분 시퀀스를 반환하는 "subseq"라는 함수가 포함되어 있습니다. 두 문자열의 길이에 대해 반복되고 'i'와 'j'가 모두 0이면 배열의 특정 인덱스가 0으로 할당됩니다. 그렇지 않으면 my_arr[첫 번째 문자열의 길이 +1][두 번째 문자열의 길이 + 1]이 구축되었습니다.

주 함수는 Demo 클래스의 새 인스턴스를 정의하고 두 개의 문자열 my_str_1 및 my_str_2를 정의합니다. 두 문자열 모두 배열로 변환되고 해당 길이는 별도의 변수에 저장됩니다. 이 값에 대해 함수가 호출됩니다.

이것은 하나의 값을 계산하여 배열에 저장하는 동적 프로그래밍 기법으로, 재귀에서처럼 반복해서 계산할 필요가 없습니다. 이전에 계산된 요소가 필요할 때마다 배열에서 가져옵니다.