gpt4 book ai didi

algorithm - 计算最长公共(public)子序列复杂度的数学递归关系

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:31:19 25 4
gpt4 key购买 nike

我想用数学方法计算 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));
}

谁能解释如何驱动这种递推关系?

最佳答案

递归关系为:

T(n,m) = T(n-1,m-1)+O(1), if (X[m-1] = Y[n-1])
or
T(n-1,m)+T(n,m-1)+O(1), otherwise

我们必须考虑最坏的情况,即:

 T(n,m) = T(n-1,m)+T(n,m-1)+O(1)

贯穿始终。这可以归结为:

T(n,m) <= 2^(n-1) T(0,m) + ... , if m<n (longest branch of height n)
or
2^(m-1) T(n,0) + ... , if n<m (longest branch of height m)

在这里,如果最长的分支长度为 k,如果假设所有其他分支的高度也为 k,我们将得到一个上限。由于 T(0,k) 和 T(k,0) 都是常数,我们有

T(n,m) = O(2^(max(n,m)))

或者

T(n,m) = O(2^n)

如果 n 和 m 相等。

关于algorithm - 计算最长公共(public)子序列复杂度的数学递归关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15290865/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com