package com.hhmstu.Algorithmdesignandanalysis.Dynamicprogramming; public class LCS { public static void main(String[] args) { int a = 5; int b = 6; char[] X = {'g', 'a', 'b', 'c', 'd', 'e', 'f'};//‘g’用于占位 char[] Y = {'g', 'b', 'd', 'f', 'b', 'a'}; int[][] m = new int[6][7]; int max = lcs(a, b, X, Y, m); System.out.println("其最长公共子序列的LCS为:" + max); for (int i = 0; i < 6; i++) { for (int j = 0; j < 7; j++) { System.out.print(m[i][j]+"\t"); if ((j+1)%7==0){ System.out.println(); } } } } public static int lcs(int a, int b, char[] X, char[] Y, int[][] m) { //初始化记忆化表 for (int i = 0; i < a + 1; i++) { m[i][0] = 0; } for (int i = 0; i < b + 1; i++) { m[0][i] = 0; } //根据递推公式一行一行向下填表 for (int i = 1; i < a + 1; i++) { for (int j = 1; j < b + 1; j++) { if (Y[i] == X[j]) { m[i][j] = m[i-1][j-1] +1; } else { m[i][j] = Math.max(m[i-1][j],m[i][j-1]); } } } return m[a][b]; } }
最长公共子序列与动态规划
最新推荐文章于 2024-07-22 14:15:06 发布