不同长度数组中的公共子序列
Common Subsequence in Different Length Arrays
我已经实现了一个 DP 算法,它在三个数组中找到最长的公共子序列。但问题是,当数组长度不同时,我的算法不起作用,我不知道为什么。据我所知,我的算法是正确的,所以我认为这与 Java 实现有关。这是我的 Java 代码:
static int[] lcsOf3(int[] X, int[] Y, int[] Z, int xLength, int yLength, int zLength) {
int[][][] S = new int[xLength + 1][yLength + 1][zLength + 1];
for (int i = 0; i <= xLength; i++) {
for (int j = 0; j <= yLength; j++) {
for (int k = 0; k <= zLength; k++) {
if (i == 0 || j == 0 || k == 0) {
S[i][j][k] = 0;
} else if (X[i - 1] == Y[j - 1] && X[i - 1] == Z[k - 1]) {
S[i][j][k]= S[i - 1][j - 1][k - 1] + 1;
} else {
S[i][j][k] = Math.max(Math.max(S[i - 1][j][k], S[i][j - 1][k]), S[i][j][k - 1]);
}
}
}
}
System.out.println(S[xLength][yLength][zLength]);
}
我又看了看我的代码,结果发现这是我实现的问题,而不是算法本身。我的代码获取输入数组 (X,Y,Z) 的部分存在错误。修复错误后,它可以在不同大小的列表上正常工作。
感谢所有试图提供帮助的人,很抱歉浪费了你们的时间。
我已经实现了一个 DP 算法,它在三个数组中找到最长的公共子序列。但问题是,当数组长度不同时,我的算法不起作用,我不知道为什么。据我所知,我的算法是正确的,所以我认为这与 Java 实现有关。这是我的 Java 代码:
static int[] lcsOf3(int[] X, int[] Y, int[] Z, int xLength, int yLength, int zLength) {
int[][][] S = new int[xLength + 1][yLength + 1][zLength + 1];
for (int i = 0; i <= xLength; i++) {
for (int j = 0; j <= yLength; j++) {
for (int k = 0; k <= zLength; k++) {
if (i == 0 || j == 0 || k == 0) {
S[i][j][k] = 0;
} else if (X[i - 1] == Y[j - 1] && X[i - 1] == Z[k - 1]) {
S[i][j][k]= S[i - 1][j - 1][k - 1] + 1;
} else {
S[i][j][k] = Math.max(Math.max(S[i - 1][j][k], S[i][j - 1][k]), S[i][j][k - 1]);
}
}
}
}
System.out.println(S[xLength][yLength][zLength]);
}
我又看了看我的代码,结果发现这是我实现的问题,而不是算法本身。我的代码获取输入数组 (X,Y,Z) 的部分存在错误。修复错误后,它可以在不同大小的列表上正常工作。
感谢所有试图提供帮助的人,很抱歉浪费了你们的时间。