【问题标题】:Solving the recurrence equation T(n) = 3 + m * T(n - m)求解递推方程 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)

...

显然,根据这些不等式没有直接的消除。所以,我想知道在这种情况下是否应该使用另一种技术。

【问题讨论】:

    标签: recursion computer-science


    【解决方案1】:

    不用担心m - 这只是一个常量参数。但是,您正在错误地展开递归。展开的每一步都涉及三个操作:

    1. 用参数值取T的值,即mless
    2. 乘以m
    3. 添加常量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,对吗?但这并不重要,你只需要估计总步数
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-22
    • 1970-01-01
    • 2020-03-05
    相关资源
    最近更新 更多