JacksonSteel Ответов: 2

В задаче LCS почему бы (len[I][j]=len[I-1][j-1]+1; ) просто не быть len[I][j]=len[I-1][j]+1; ? [динамическое программирование]


 for (int i=1; i<=n1; i++)
        for (int j=1; j<=n2; j++)
            if (s1[i] == s2[j])
                length[i][j] = length[i-1][j-1] + 1;
            else
                length[i][j] = max(length[i-1][j],
                                   length[i][j-1]);
 
  a b g d
e 0 0 0 0
f 0 0 0 0
g 0 0 1 1
d 0 0 1 2


Что я уже пробовал:

образ моих мыслей
[Динамическое программирование]

Richard MacCutchan

Понятия не имею, это твой код. Или, возможно, вы просто скопировали какой-то случайный код из интернета.

JacksonSteel

Мой код

2 Ответов

Рейтинг:
2

OriginalGriff

Чтобы разобраться в этом, вам нужно будет прочитать и понять алгоритм.
Это может помочь: Самая длинная общая проблема подпоследовательности - Википедия[^]

Но... как только вы решите, что это так, начните с отладчика и внесите изменения, которые вы предлагаете. Затем проверьте его с помощью различных тестовых данных. Получаете ли вы те же результаты, что и неизмененная версия? Правильно ли вы идентифицируете LCS? Если вы за все случаи, то отлично! Вы можете написать статью о своем более простом решении!
Но... если нет, то вы знаете, что не можете, и вам потребуется довольно много копать, чтобы понять, почему нет ...

Наслаждайтесь вызовом! :большой палец вверх:


Рейтинг:
2

Richard MacCutchan

Я предлагаю вам получить копию Язык Программирования Си - Википедия[^] и потратьте некоторое время на изучение языка с самого начала.