📜  算法|复发|套装1

📅  最后修改于: 2021-04-22 00:52:46             🧑  作者: Mango

  • 问题1:以下哪个是T 3 (n)的值,其中T 3 (n)定义为T 3 (n)= 5 * T 3 (n-1)– 4 * T 3 (n-2)
    1. C 1 * 5 n + C 2 * 4 n
    2. C 1 + C 2 * 4 n
    3. C 1 * 2 n + C 2 * 4 n
    4. C 1 * 5 n + C 2 *(-4) n

    答: 2

    说明:递归函数(方程式)似乎有一个奇怪的形式。让我们更改变量T 2 (n)以获得熟悉形式的方程;因此,我们让A(n)= T 3 (n);那么我们有:

    A(n) = 5*A(n - 1) - 4*A(n - 2)

    我们新的微分方程的特征方程为:

    r^{2} - 5*r + 4 = 0   \Rightarrow  (r-4)(r-1) = 0

    因此,该方程的齐次解应为:

    A(n) = C_{1} *  1^{n} + C_{2} * 4^{n} = C_{1} + C_{2} * 4^{n}

    正如我们定义的A(n)= T 3 (n),最后的答案是:

    T^{3}(n) = C_{1} + C_{2} *   4^{n}  = C_{1} + C_{2} * 4^{n}

  • 问题2:以可以使F(n)=(n + 2)的方式确定初始条件F(1)的值!作为以下给定递归函数的解决方案:
    F(n) = (n+1) * F(n-1) + (n+1)! 
    
    1. 3
    2. 4
    3. 6
    4. 2个

    答: 3

    说明:通过使用迭代技术来求解给定的递归函数,我们将具有:

    F(n) = (n+1) * F(n - 1) + (n+1)! = (n+1) * (n*F(n-2) + n!) + (n+1)! =(n+1)*(n)*F(n-2) + 2* (n+1)!

    如果继续进行这些推导,我们可以很容易地猜到答案应该是以下形式:

    F(n) = (n+1)(n)(n - 1)* ... *(n - k + 2)F(n - k) + k * (n+1)!

    迭代方法的最后一步(停止点)是当我们达到初始条件F(1)时;因此,我们令k = n-1,并且非递归形式为:

    F (n) = (n + 1)*(n)*(n - 1)*...*(3) * F(1) + (n - 1) * (n+1)!

     = (n + 1)*(n)*(n - 1)*...*(3) * (2 * \frac{1}{2}) * F(1) + (n - 1) * (n+1)!

      = (n+1)! * ( \frac{F(1)}{2}) + (n - 1) * (n+1)! = (n+1)! * (\frac{F(1)}{2} + (n - 1))

    根据给定的函数F(n)以及到现在为止我们得出的结果是:

     F(n) = (n+2)! = (n+1)! * (n+2) = (n+1)! * (\frac{F(1)}{2} + (n - 1))

    最后,我们将看到,F(1)的值为:

     F(1) = 2*(n + 2) - 2*(n - 1) = 6

  • 问题3: T(n)= 4 * T(n / 2)+ n * log(n!)的时间复杂度是多少。
    1. θ(n *对数n)
    2. θ(n 2 )
    3. θ(n 2 *对数n)
    4. θ(n 2 * log 2 n)

    答: 4

    说明:我们知道log(n!)∈ θ(n * log n)

    现在,等效的问题是分析新递归函数的顺序:

     T(n) = 4 * T(\frac{n}{2}) + n^{2} * log(n)

    我们可以通过母定理解决这个问题。为了在这里应用主定理,我们有f(n)= n 2 * log(n) ,参数a (子问题的数量), b (约简因子)和C等于4、2 ,和2;因此,θ(n log b a )为θ(n 2 ),属于相同的复杂度类别θ(n C = 2 );因此,给定的递归函数属于主定理的情况2。

    根据主定理,T(n)将具有以下顺序:

     T(n) \in \theta(n^{2} * log^{2}n )

  • 问题4:哪一个可以最好地估计T(n)的复杂度?

    T(n)=  3^{log_{3}6} * T(N / 2)+ N 2√N + 1。

    1. θ(n 2 *√ n * log n)
    2. O(n 2 *√ n + 1 * log n)
    3. θ(  n^{log_{2}6} )
    4. θ(  n^{log_{3}6} )
    5. O(n 2 *√ n )。

    答: 3

    说明:我们知道a^{log_{b}C} = C^{log_{b}a} , 和n^{2}*\sqrt(n+1) \in \theta (n^{2 + \frac{1}{2}}) \in \theta (n^{\frac{5}{2}}) ;因此,我们可以简化递归函数,如下所示:

    T(n) = 3^{log_{3}6} * T(\frac{n}{2}) + n * \sqrt(n+1) = 6* T(\frac{n}{2}) + \theta ( n^{\frac{5}{2}} )

    它属于母定理的情况3;因此, T(n)的渐近复杂度为:

    T(n) \in \theta ( n^{log_{2}6} )

  • 问题5:对于T(n)= T(n / 4)+ T(3n / 4)+ n,哪个渐近边界不正确?
    1. O(n log 4/3 2 )
    2. Ω(n)
    3. O(n * log(n))
    4. 以上都不是

    答: 4

    说明:通过主定理,我们可以指定与前两个选项(A)和(B)中所示的边界相同的边界:

    1. T(n) = T(\frac{n}{4}) + T(\frac{3n}{4}) + n     \leq   2*T(\frac{3n}{4})+n   \Rightarrow  T(n) \in  O (n^{ log_{4/3}2})
    2. T(n) = T(\frac{n}{4}) + T(\frac{3n}{4}) + n      \geq   2*T(\frac{n}{4})+n   \Rightarrow  T(n) \in  \Omega (n)

    我们可以通过递归树方法找出第三种选择的正确性。我们画一棵树,我们很容易猜出T(n)的适当边界:

    递归Tree_of_T(n)

    递归树的分支长度不能小于h r ,也不能大于h L ;因此可以推断出以下估计:

    1. T(n)  \leq n * h_{r} = n * log_{\frac{4}{3}}n  \Rightarrow T(n)  \in O( n*log(n) )
    2. T(n)  \geq n * h_{L} = n * log_{4}n  \Rightarrow T(n)  \in  \Omega ( n*log(n) )

    根据上述两个边界,我们还有T(n)∈。 θ(n * log(n))

    我们知道如果T(n)∈ O(n * log(n)) ,也必须是O(n log 4/3 n ) ;因此,如果我们首先评估了第三个选项,那么实际上我们也会推断出选项(A)的正确性。但是,递归树仅提供有关如何猜测适当边界的想法。由于有人可能会做出错误的猜测,因此此方法还需要验证或证明它不会违反所使用符号的定义。在考虑符号定义的同时,可以通过迭代替换为T(n)来归纳地获得该验证(证明)。