求解递推方程T(n)= 3 + m * T(n - m)

时间:2018-01-14 01:56:46

标签: recursion computer-science

我明天有一个计算机科学中期,我需要帮助确定特定递归函数的复杂性,如下所示,这比我已经处理过的东西要复杂得多:它有两个变量

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 个答案:

答案 0 :(得分:1)

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

  1. 使用参数值取值T,即m更少
  2. 乘以m
  3. 添加常量3
  4. 所以,它看起来像这样:

    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)的封闭公式(我将离开最后一步)。