Я хочу математически вычислить рекуррентное отношение для задачи алгоритма LCS. Моя цель - применить теорему Мастера для вычисления сложности O (2^n).Математическое рекуррентное отношение для вычисления сложности самой длинной общей подпоследовательности
/* Returns length of LCS for X[0..m-1], Y[0..n-1] */
int lcs(char *X, char *Y, int m, int n)
{
if (m == 0 || n == 0)
return 0;
if(X[m-1] == Y[n-1])
return 1 + lcs(X, Y, m-1, n-1);
else
return max(lcs(X, Y, m, n-1), lcs(X, Y, m-1, n));
}
Любой может объяснить, как управлять этим возвратным отношением?
В худшем случае, когда строки отличаются друг от друга, при каждом вызове 'lcs()' вы почти удваиваете объем работы (вы вызываете 'lcs()' 2 раза). Это дает вам экспоненциальную сложность. –
@AlexeyFrunze вы можете дать отношение повторения для этого. –