Algorithm 分析了一种递归T(n)=T(n-1)+;T(n-2)和"x2B,;T(n-3)?

Algorithm 分析了一种递归T(n)=T(n-1)+;T(n-2)和"x2B,;T(n-3)?,algorithm,math,complexity-theory,big-o,Algorithm,Math,Complexity Theory,Big O,所以,有人在早些时候发布了这篇文章,但基本上没有投入任何精力,它的标签很差,然后关闭了。尽管如此,我认为这可能是一个好问题。我发帖是因为根据OP,我的回答(在评论中发帖)与解决方案不一致。因此,我试图找出我做错了什么(假设他给出的答案确实正确): 我们有: T(N) = T(N-1) + T(N-2) + T(N-3) 其中N>3。他没有列出基本情况,但由于N>3,我假设t(3)、t(2)和t(1)可能有3个基本情况。要计算T(K),我们执行以下操作: T(K) = T(K-1) + T(K-

所以,有人在早些时候发布了这篇文章,但基本上没有投入任何精力,它的标签很差,然后关闭了。尽管如此,我认为这可能是一个好问题。我发帖是因为根据OP,我的回答(在评论中发帖)与解决方案不一致。因此,我试图找出我做错了什么(假设他给出的答案确实正确):

我们有:

T(N) = T(N-1) + T(N-2) + T(N-3)
其中N>3。他没有列出基本情况,但由于N>3,我假设
t(3)
t(2)
t(1)
可能有3个基本情况。要计算
T(K)
,我们执行以下操作:

T(K) = T(K-1) + T(K-2) + T(K-3)
那么我们必须计算:

T(K-1) = T((K-1)-1) + T((K-1)-2) + T((K-1)-3)
T(K-2) = T((K-2)-1) + T((K-2)-2) + T((K-2)-3)
T(K-3) = T((K-3)-1) + T((K-3)-2) + T((K-3)-3)
等等。。。 下面是一个树表示:

L0                                                  T(K)
                      /                              |                              \
L1               T(K-1)                            T(K-2)                           T(K-3)
          /         |     \                 /        |          \                 /   |     \
L2   T((K-1)-1) T((K-1)-2) T((K-1)-3)  T((K-2)-1) T((K-2)-2) T((K-2)-3) T((K-3)-1) T((K-3)-2) T((K-3)-3)    
                 ...                                ...                                ...
所以我们有3个孩子,然后是9个孩子,然后是27个孩子,…,直到我们达到基本情况。因此,算法是
O(3^(N-3))
,其中
N-3
用于解释三种基本情况,即在T(4)之后,我们只能有基本情况,没有更多分支


实际的解决方案从未提供,但正如我所说,我被告知这是不正确的。如果您有任何帮助,我们将不胜感激。

您设置的重现期如下:

T(K) = T(K-1) + T(K-2) + T(K-3)
T(n)=T(n-1)+T(n-2)+T(n-3)

我想基本情况可能是

T(0)=T(1)=T(2)=1

如果你开始扩展这个循环的术语,你会得到

  • T(0)=1
  • T(1)=1
  • T(2)=1
  • T(3)=3
  • T(4)=5
  • T(5)=9
  • T(6)=17
  • T(7)=31
这里似乎没有明显的模式。幸运的是,我们可以访问在线整数序列百科全书,输入术语1、1、1、3、5、9、17,你会发现这是前三个术语为1的

如果查看有关Tribonaci编号的信息,您将看到以下内容:

T(K) = T(K-1) + T(K-2) + T(K-3)
a(n)/a(n-1)趋向于Tribonaci常数,1.839286755

(这里,a(n)是站点用于我的T(n)的符号)。由于Tribonaci序列的连续项比率趋向于约1.839286755,我们知道Tribonaci序列必须呈指数增长,并且其以约为Θ(1.839286755n)的速率呈指数增长。(将其与斐波那契序列进行比较,斐波那契序列在Θ(φn)处增长,其中φ是黄金比率)。进一步阅读后,给出了Tribonaci常数的公式:

并证实了指数增长率

因此,我们可以得出结论,运行时为Θ(1.839286755n)

所以。。。你自己怎么计算呢?最简单的方法就是使用。你可以试着为你在这里写的循环推导一个生成函数,然后试着用一个封闭的形式重写生成函数,以得到精确的值。这是获得斐波那契数闭合形式的一种方法,应该在这里进行推广(尽管可能需要进行大量令人不快的数学运算)。或者,正如@tmyklebu所指出的,您可以写出以下矩阵:

     | 0 1 0 |
 M = | 0 0 1 |
     | 1 1 1 |
计算出它的特征值,其中最大的就是Tribonaci常数。(请注意,此矩阵具有以下特性:

 | 0 1 0 |   |a|   |    b    |
 | 0 0 1 | x |b| = |    c    |
 | 1 1 1 |   |c|   |a + b + c|
因此,如果将递归中的三个连续值放入列向量v并计算Mv,则返回一个新列向量,该列向量包含递归中的后两个值,以及递归中的下一个值。这样,可以通过计算Mkv并查看第一个分量来计算递归的第k个值(向量的一部分。)


希望这有帮助

这是我学到的一个很酷的方法,所以我想与大家分享一下。估计时间复杂度非常简单。 从重现性来看,我们猜测时间复杂度是指数的

让我们说:

T(N)=x^n
给定的重复次数为

T(N) = T(N-1) + T(N-2) + T(N-3)
替换

 x^n = x^n-1  + x^n-2  + x^n-3
Dividing throughout by x^n-3
 x^3 = x^2    + x^1    + 1
Rearranging
 x^3 - x^2 - x - 1=0
你可以找出它的立方根

这个三次方程有一个实根(1.8392867552141612)和两个复数根(数量级为0.73527)


因此,我们的算法的运行时间是以T(N)=1.839^N为界的,正如一些人所注意到的,这种递归不同于原始递归
T(N)=T(N-1)+T(N-2)-T(N-3)
。我更喜欢@Aravind给出的假设T(N)=x^N的方法。通过此循环,您可以得到特征方程
x^3-x^2-x+1=(x-1)^2(x+1)
。(这将是@templatetypedef矩阵方法的特征方程,如果采用该方法,则为生成函数的分母。)

反复的根源导致了各种各样的困难。矩阵是不可对角化的。当你对生成函数进行因子分解时,它有一个重复的分母。当你假设T(N)=x^N时,你只得到两个线性独立的解,需要第三个


一般来说,当你假设T(N)=x^N并得到一个双根
r
,这意味着线性独立的解是
r^N
N*r^N
(三重根将引入
N^2*r^N
)。所以在我们的例子中,递归的三个线性独立解是
(-1)^N
1^N=1
,和
N*1^N=N
。这意味着一般解是
T(N)=a(-1)^N+B+C*N
,您可以使用初始条件来确定
a
B
C
。如果
C=0,则
T(N)=Θ(N)
,否则
T(N)=Θ(1)
。这对于一个算法来说可能不太现实。

这在一个算法的上下文中有意义吗?子问题的时间减法是什么时候发生的?我不知道最初的问题是从哪里来的。尽管如此,一个ca