算法:斐波那契数列通项公式推导

9-17_算法实验报告

斐波那契数列

已知:
f ( n ) = { f ( n − 1 ) + f ( n − 2 ) ; ( n > 2 ) 1 ; ( n = 1 , n = 2 ) f(n) = \begin{cases}f(n-1) + f(n - 2);(n > 2)\\ 1;(n = 1, n = 2)\end{cases} f(n)={ f(n1)+f(n2)(n>2)1(n=1,n=2)
请使用 生成函数法 求该函数的时间复杂度。

解答

对于斐波那契数列,已知:
f ( n ) = f ( n − 1 ) + f ( n − 2 ) ; ( n > 2 ) f(n) = f(n - 1) + f(n-2);(n > 2) f(n)=f(n1)+f(n2)(n>2)
构造一个函数为:
G ( x ) = f ( 1 ) x + f ( 2 ) x 2 + . . . + f ( n ) x n + . . . G(x) = f(1)x + f(2)x^2 + ... + f(n)x^n+ ... G(x)=f(1)x+f(2)x2+...+f(n)xn+...
则有:
G ( x ) − x G ( x ) − x 2 G ( x ) = f ( 1 ) x + f ( 2 ) x 2 + . . . + − f ( 1 ) x 2 − f ( 2 ) x 3 − . . . − − f ( 1 ) x 3 − f ( 2 ) x 4 − . . . − G(x) - x G(x) - x^2G(x) = f(1)x + f(2)x^2 + ...+ \\ - f(1)x^2 - f(2)x^3 - ... - \\ - f(1)x^3 - f(2)x^4 - ... - \\ G(x)xG(x)x2G(x)=f(1)x+f(2)x2+...+f(1)x2f(2)x3...f(1)x3f(2)x4...
整理之后可得:
G ( x ) − x G ( x ) − x 2 G ( x ) = f ( 1 ) x + ( f ( 2 ) − f ( 1 ) ) x 2 + ( f ( 3 ) − f ( 2 ) − f ( 1 ) ) x 3 + . . . + G(x) - x G(x) - x^2G(x) = f(1)x + (f(2)-f(1))x^2 + (f(3)-f(2)-f(1))x^3 + ... + G(x)xG(x)x2G(x)=f(1)x+(f(2)f(1))x2+(f(3)f(2)f(1))x3+...+
则:
G ( x ) − x G ( x ) − x 2 G ( x ) = x G(x) - x G(x) - x^2G(x) = x G(x)xG(x)x2G(x)=x

G ( x ) = x 1 − x − x 2 G(x) = \frac{x}{1-x-x^2} G(x)=1xx2x

通过待定系数法,拆分为:
G ( x ) = a 1 − r x + b 1 − s x G ( x ) = a ( 1 − s x ) + b ( 1 − r x ) ( 1 − r x ) ( 1 − s x ) = ( a + b ) − ( a s + b r ) x 1 − ( r + s ) x + r s x 2 G(x) = \frac{a}{1-rx} + \frac{b}{1-sx}\\ G(x) = \frac{a(1-sx) + b(1-rx)}{(1-rx)(1-sx)} = \frac{(a + b) - (as+br)x}{1-(r+s)x+rsx^2} G(x)=1rxa+1sxbG(x)=(1rx)(1sx)a(1sx)+b(1rx)=1(r+s)x+rsx2(a+b)(as+br)x
已知:
x 1 − x − x 2 = ( a + b ) − ( a s + b r ) x 1 − ( r + s ) x + r s x 2 \frac{x}{1-x-x^2}= \frac{(a + b) - (as+br)x}{1-(r+s)x+rsx^2} 1xx2x=1(r+s)x+rsx2(a+b)(as+br)x
则可列出四元方程组:
{ a + b = 0 a s + b s = − 1 r + s = 1 r s = − 1 { a = 1 5 b = − 1 5 r = 1 + 5 2 s = 1 − 5 2 \begin{cases} a+b = 0\\ as + bs = -1\\ r+s = 1\\ rs = -1 \end{cases} \\ \begin{cases} a = \frac{1}{\sqrt{5}}\\ b = - \frac{1}{\sqrt{5}}\\ r = \frac{1+\sqrt{5}}{2}\\ s = \frac{1-\sqrt{5}}{2} \end{cases} a+b=0as+bs=1r+s=1rs=1a=5 1b=5 1r=21+5 s=215
故利用泰勒公式:
G ( x ) = a 1 − r x + b 1 − s x = a ( 1 + r x + r 2 x 2 + . . . ) + b ( 1 + s x + s 2 x 2 + . . . ) G(x) = \frac{a}{1-rx} + \frac{b}{1-sx}\\ = a(1+rx+r^2x^2+...) + b(1+sx+s^2x^2+...) G(x)=1rxa+1sxb=a(1+rx+r2x2+...)+b(1+sx+s2x2+...)
展开整理后得:
G ( x ) = ( a + b ) + ( a r + b s ) x + ( a r 2 + b s 2 ) x 2 + . . . + ( a r n + b s n ) x n + . . . G(x) = (a + b) + (ar+bs)x+(ar^2+bs^2)x^2 + ... + (ar^n + bs^n)x^n + ... G(x)=(a+b)+(ar+bs)x+(ar2+bs2)x2+...+(arn+bsn)xn+...
和一开始构造函数相比:
G ( x ) = f ( 1 ) x + f ( 2 ) x 2 + . . . + f ( n ) x n + . . . G(x) = f(1)x + f(2)x^2 + ... + f(n)x^n+ ... G(x)=f(1)x+f(2)x2+...+f(n)xn+...
可得 f(n) 即为:
f ( n ) = a r n + b s n = 1 5 [ ( 1 + 5 2 ) n − 1 − 5 2 ) n ] f(n) = ar^n+ bs^n = \frac{1}{\sqrt{5}}[(\frac{1+\sqrt{5}}{2})^n - \frac{1-\sqrt{5}}{2})^n] f(n)=arn+bsn=5 1[(21+5 )n215 )n]
所以最终结果为:
f ( n ) = 1 5 [ ( 1 + 5 2 ) n − ( 1 − 5 2 ) n ] f(n) = \frac{1}{\sqrt{5}}[(\frac{1+\sqrt{5}}{2})^n - (\frac{1-\sqrt{5}}{2})^n] f(n)=5 1[(21+5 )n(215 )n]
由此得 f(n) 为幂级数的差,时间复杂度为 O(n)

猜你喜欢

转载自blog.csdn.net/qq_39446719/article/details/109079609