扎卡里:
比方说你给出此 复发:
数r(n)= 2 * R(N-2)+ R(N-1); r(1)= r(2) = 1
这是,事实上,这是 主定理的形式?如果是这样的话,那么 是什么意思?
我认为你的递推关系的意思是,对于“R”与“N”为参数的功能(占总数的数据集你输入),无论你在第n数据集的位置是第n-1个位置的输出加上两次任何是第n-2个位置的结果,而不进行非递归工作。当你试图解决复发关系时,你试图用一种不涉及递归的方式来表达它。
但是,我认为这不是主定理方法的正确形式。你的陈述是一个“具有常系数的二阶线性递推关系”。显然,根据我的旧离散数学教科书,这是你需要有的形式来解决重现关系。
这里的形式,它们能使:
r(n) = a*r(n-1) + b*r(n-2) + f(n)
对于 '一' 和 'b' 是一些常数,f(n)是n个某些功能。在你的陈述中,a = 1,b = 2和f(n)= 0。每当f(n)等于零时,递归关系就称为“同质的”。所以,你的表情是同质的。
因为f(n)= 0,所以我不认为你可以使用主方法Theoerm求解同质递归关系。主方法定理没有一种情况允许这样做,因为n-to-the-power-任何东西都不能等于零。我可能是错的,因为我不是这方面的专家,但我不认为有可能使用主方法解决同质复发关系。
我认为,要解决均匀递推关系的方法是通过5个步骤走:
1)形式特征方程,这是形式的东西:
x^k - c[1]*x^k-1 - c[2]*x^k-2 - ... - c[k-1]*x - c[k] = 0
如果您“VE只在您的同质递推关系得到了2种递归的情况下,那么你只需要改变你的方程为二次方程,其中
x^2 - a*x - b = 0
这是BEC澳洲英语的
r(n) = a*r(n-1) + b*r(n-2)
形式的递归关系可以将递归关系改写为一个特征方程之后被重写为
r(n) - a*r(n-1) - b*r(n-2) = 0
2),下找到根(X [1]和x [2])的特征方程。
3)同你的根,您的解决方案现在将是两种形式之一:
if x[1]!=x[2]
c[1]*x[1]^n + c[2]*x[2]^n
else
c[1]*x[1]^n + n*c[2]*x[2]^n
当n> 2。 4)随着你的递归解决方案的新形式,您使用初始条件(R(1)和R(2))找到C [1]和C [2]
你的榜样去这里的我们得到:
1) 数r(n)= 1 * R(N-1)+ 2 * R(N-2) => X^2 - X - 2 = 0
2 )求解x
x = (-1 +- sqrt(-1^2 - 4(1)(-2)))/2(1)
x[1] = ((-1 + 3)/2) = 1
x[2] = ((-1 - 3)/2) = -2
3)既然x [1]!= x [2],你的soluti对具有以下形式:
c[1](x[1])^n + c[2](x[2])^n
4)现在,用你的初始条件,找到两个常数C [1]和C [2]:
c[1](1)^1 + c[2](-2)^1 = 1
c[1](1)^2 + c[2](-2)^2 = 1
老实说,我不知道是什么你的常量是在这种情况下,我停止在这一点上。我猜你不得不插入数字,直到你能以某种方式为c [1]和c [2]获得一个满足这两个表达式的值。要么或执行上的矩阵C行还原,其中C等于:
[ 1 1 | 1 ]
[ 1 2 | 1 ]
扎卡里:
复发,在最好 方式描述了加法运算的在下面的程序片段 数(当与升== 1和r == N)
int example(A, int l, int r) {
if (l == r)
return 2;
return (A[l] + example(A, l+1, r);
}
在这里称为了给定代码的时间复杂度的值在r> 1:
int example(A, int l, int r) { => T(r) = 0
if (l == r) => T(r) = 1
return 2; => T(r) = 1
return (A[l] + example(A, l+1, r); => T(r) = 1 + T(r-(l+1))
}
Total: T(r) = 3 + T(r-(l+1))
否则,当r ==升则T(R)= 2,因为if语句和返回都需要1步每次执行。
好的,这似乎很简单。我不确定'复发'是什么,但是我的教授经常使用这个词,并且在练习测试中有几个问题要求我们看一个程序,然后找到它。我会用另一个例子编辑我的问题。 – 2008-10-20 17:35:22