求解递推方程 T(n) = 3 + m * T(n - m)
Posted
技术标签:
【中文标题】求解递推方程 T(n) = 3 + m * T(n - m)【英文标题】:Solving the recurrence equation T(n) = 3 + m * T(n - m) 【发布时间】:2018-06-23 01:59:06 【问题描述】:我明天有一个计算机科学期中考试,我需要帮助确定以下特定递归函数的复杂性,这比我已经研究过的东西要复杂得多:它有两个变量
T(n) = 3 + mT(n-m)
在m是常数的更简单的情况下,公式可以很容易地通过编写解包关系得到;然而,在这种情况下,拆包并没有让生活变得更轻松,如下所示(假设 T(0) = c):
T(n) = 3 + mT(n-m)
T(n-1) = 3 + mT(n-m-1)
T(n-2) = 3 + mT(n-m-2)
...
显然,根据这些不等式没有直接的消除。所以,我想知道在这种情况下是否应该使用另一种技术。
【问题讨论】:
【参考方案1】:不用担心m
- 这只是一个常量参数。但是,您正在错误地展开递归。展开的每一步都涉及三个操作:
-
用参数值取T的值,即
m
less
乘以m
添加常量3
所以,它看起来像这样:
T(n) = m * T(n - m) + 3 = (Step 1)
= m * (m * T(n - 2*m) + 3) + 3 = (Step 2)
= m * (m * (m * T(n - 3*m) + 3) + 3) + 3 = ... (Step 3)
等等。展开T(n)
直到步骤k
将由以下公式给出:
T(n) = m^k * T(n - k*m) + 3 * (1 + m + m^2 + m^3 + ... + m^(k-1))
现在你设置n - k*m = 0
使用初始条件T(0)
并得到:
k = n / m
现在您需要使用几何级数之和的公式 - 最后您将获得 T(n)
的封闭公式(我将最后一步留给您)。
【讨论】:
@A.Loc - 您在问题中写道T(0)=c
,对吗?但这并不重要,你只需要估计总步数以上是关于求解递推方程 T(n) = 3 + m * T(n - m)的主要内容,如果未能解决你的问题,请参考以下文章
数字信号处理线性常系数差分方程 ( 使用递推解法求解 “ 线性常系数差分方程 “ | “ 线性常系数差分方程 “ 初始条件的重要性 )