Общая подпоследовательность в массивах различной длины - PullRequest
0 голосов
/ 29 октября 2018

Я реализовал алгоритм 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]);
}

1 Ответ

0 голосов
/ 01 ноября 2018

Я еще раз посмотрел на мой код, и оказалось, что это было что-то с моей реализацией, а не сам алгоритм.В той части моего кода была ошибка, которая получала входные массивы (X, Y, Z).После исправления ошибки он корректно работает со списками разных размеров.

Спасибо всем, кто пытался помочь, и извините, что потратил ваше время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...