(i) The fast method for the nth term of the Fibonacci sequence F[n]=f[n-1]+f[n-2],f[1]=f[2]=1 (without considering the high accuracy).
Solution:
Consider the 1x2 matrix "f[n-2],f[n-1]". Based on the recursive relationship of the Fibonacci sequence, we want to get the matrix "f[n-1],f[n" = "f[n-1],f[n-1]+f[n-2" by multiplying a 2x2 matrix.
It is easy to construct this 2x2 matrix A, namely:
So, there are "f[1],f[2" "xa=" f[2],f[3] "
And because matrix multiplication satisfies the binding law, there are:
"f[1],f[2]" xa n-1= "f[n],f[n+1]"
The first element of this matrix is the one that is being asked.
As for how to quickly find a n-1, I believe everyone will, that is, recursion: N is even when an= (a n/2) 2;n is odd, an= (a n/2) 2*a.
Problem (a) resolved.
(ii) The fast method for the nth term of the sequence f[n]=f[n-1]+f[n-2]+1,f[1]=f[2]=1 (without considering the high accuracy).
Solution:
In the following precedent, considering the matrix "f[n-2],f[n-1],1" of 1x3, we hope to obtain a 3x3 matrix A, which multiplies the matrix of this 1x3 by a: "f[n-1],f[n],1" = "f[n-1],f[n-1]+f[n-2]+1,1"
It is easy to construct this 3x3 matrix A, i.e.:
Problem (ii) resolved.
(iii) The fast method for the nth term of the sequence f[n]=f[n-1]+f[n-2]+n+1,f[1]=f[2]=1 (without considering the high accuracy).
Solution:
In the following precedent, consider the matrix "f[n-2],f[n-1],n,1" of the 1x4, hoping to obtain a 4x4 matrix A, so that the 1x4 matrix multiplied by a to get the matrix:
"f[n-1],f[n],n+1,1" = "f[n-1],f[n-1]+f[n-2]+n+1,n+1,1"
It is easy to construct this 4x4 matrix A, i.e.:
0 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
Problem (c) settlement ...
(iv) The fast method of finding the first N and S[n] of the sequence f[n]=f[n-1]+f[n-2],f[1]=f[2]=1 (without considering the high accuracy).
Solution:
Although we have s[n]=f[n+2]-1, but this article does not consider this method, we want to get a more general method.
Consider (a) The matrix A, which is easy to find we require "f[1],f[2" x (a+a2+a3+...+an-1). Many people use a very mathematical method to construct a 2r*2r (R is the order of a, here is 2) of the matrix to calculate, this method is cumbersome and very slow, this is no longer described here. A new approach is considered below.
Modelled on the previous idea, consider 1x3 's matrix "f[n-2],f[n-1],s[n-2", which we want to get 1x3 by multiplying a 3x3 matrix A:
"f[n-1],f[n],s[n-1]" = "f[n-1],f[n-1]+f[n-2],s[n-2]+f[n-1]"
Easy to get this 3x3 matrix is:
And then............ It is easy to find that the matrix size of this method is (r+1) * (r+1), much better than the previous popular method.
(v) The fast method of calculating the first n and S[n] of the sequence f[n]=f[n-1]+f[n-2]+n+1,f[1]=f[2]=1 (without considering the high accuracy).
Solution:
In combination (iii) (iv), it is easy to think of ...
Consider the Matrix "f[n-2],f[n-1],s[n-2],n,1" of 1x5,
We need to find a 5x5 matrix A so that it is multiplied by a to get a matrix of the following 1x5:
"f[n-1],f[n],s[n-1],n+1,1"
= "F[n-1", f[n-1]+f[n-2]+n+1,s[n-2]+f[n-1],n+1,1 "
Easy to construct a for:
0 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
And then...... Problem solving.
In general, if there is f[n]=p*f[n-1]+q*f[n-2]+r*n+s
You can construct the matrix A as:
0 |
Q |
0 |
0 |
0 |
1 |
P |
1 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
R |
0 |
1 |
0 |
0 |
S |
0 |
1 |
1 |
More generally, for F[n]=sigma (A[n-i]*f[n-i]) +poly (n), where 0<i<= a constant C, Poly (n) represents the polynomial of n, we can still construct a similar matrix A to solve the problem.
Set degree (Poly (n)) =d, and specify Poly (n) =0, D=-1, at this time corresponds to the constant coefficient linear homogeneous recursion relationship. The first n and the complexity of this method are:
((c+1) + (d+1)) 3*logns