蓝桥杯备赛--教你用矩阵优化递推

Posted 你,好

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了蓝桥杯备赛--教你用矩阵优化递推相关的知识,希望对你有一定的参考价值。

先导知识

  1. 矩阵乘法
    [ a b c d ] ∗ [ e f g h ] = [ a e + b g a f + b h c e + d g c f + d h ] \\beginbmatrix a & b \\\\ c & d \\endbmatrix * \\beginbmatrix e & f \\\\ g & h \\endbmatrix = \\beginbmatrix ae+bg & af+bh \\\\ ce+dg & cf+dh \\endbmatrix [acbd][egfh]=[ae+bgce+dgaf+bhcf+dh]
    由此可见矩阵乘法不满足交换律!
  2. 单位矩阵(矩阵对角线为1,其余都为0,常用E表示)
    [ 1 0 0 . . . 0 0 1 0 . . . 0 0 0 1 . . . 0 . . . . . . . . . 0 0 0 0 1 ] \\beginbmatrix 1 & 0 & 0 & ... & 0 \\\\ 0 & 1 & 0 &... & 0 \\\\ 0 & 0 & 1 & ... & 0\\\\ & ... & ... & ...\\\\ 0 & 0 & 0 & 0 &1 \\endbmatrix 1000010...0001...0............00001
    单位矩阵在矩阵世界里相当于常数中的1,任何矩阵乘单位矩阵都等于该矩阵本身
    OK, 接下来进入正题

如何用矩阵优化递推

举例子永远是最好理解新知识的方法。
斐波那契数列,不懂得可以百度一下。主要是说一个数列,前两项为1,从第3项开始数列的值为前两项之和。
用函数表示为: F i b ( n ) = 1 n<=2 F i b ( n − 1 ) + F i b ( n − 2 ) n > 2 Fib(n) = \\begincases 1 &\\textn<=2 \\\\ Fib(n-1)+Fib(n-2)&\\textn > 2 \\endcases Fib(n)=1Fib(n1)+Fib(n2)n<=2n > 2
有了递推公式,相信求出斐波那契数列的第n项是多少,用递推很好求出来。但是当n大于 1 0 18 10^18 1018时,递推就会超时。
所以接下来介绍另一种求法。
我们从递推公式可以看出,当 n < = 2 n<=2 n<=2的时候, F i b ( 1 ) = F i b ( 2 ) = 1 Fib(1)=Fib(2) = 1 Fib(1)=Fib(2)=1,那么就可以构造一个Base矩阵作为起始矩阵。
B a s e = [ 1 1 ] Base = \\beginbmatrix 1& 1 \\endbmatrix Base=[11]
n > 2 n>2 n>2 F i b ( n ) Fib(n) Fib(n) 是由 F i b ( n − 1 ) Fib(n-1) Fib(n1) F i b ( n − 2 ) Fib(n-2) Fib(n2) 决定的。
那么我们就可以构造一个状态转移矩阵 T。
[ F i b ( n − 1 ) F i b ( n − 2 ) ] ∗ [ 1 1 ] \\beginbmatrix Fib(n-1) & Fib(n-2) \\endbmatrix * \\beginbmatrix 1\\\\ 1 \\endbmatrix [Fib(n1)Fib(n2)][11]
= F i b ( n − 1 ) + F i b ( n − 2 ) = Fib(n-1)+Fib(n-2) =Fib(n1)+Fib(n2)
= F i b ( n ) = Fib(n) =Fib(n)
而求 F i b ( n + 1 ) Fib(n+1) Fib(n+1)需要 F i b ( n ) Fib(n) Fib(n) F i b ( n − 1 ) Fib(n-1) Fib(n1),所以还需要求一下 F i b ( n − 1 ) Fib(n-1) Fib(n1)
[ F i b ( n − 1 ) F i b ( n − 2 ) ] ∗ [ 1 0 ] \\beginbmatrix Fib(n-1) & Fib(n-2) \\endbmatrix * \\beginbmatrix 1\\\\ 0 \\endbmatrix [Fib(n1)Fib(n2)][10]
= F i b ( n − 1 ) = Fib(n-1) =Fib(n1)
所以这个 T 矩阵就是:
[ 1 1 1 0 ] \\beginbmatrix 1 & 1\\\\ 1 & 0 \\endbmatrix [1110]
至此,当你求斐波那契数列的第五项时,对应的矩阵公式就是:
B a s e ∗ T 3 = [ 1 1 ] ∗ [ 1 1 1 0 ] 3 = [ F i b ( 5 ) F i b ( 4 ) ] Base * T^3 = \\beginbmatrix 1 & 1 \\endbmatrix * \\beginbmatrix 1 & 1\\\\ 1 & 0 \\endbmatrix ^ 3 = \\beginbmatrix Fib(5) & Fib(4) \\endbmatrix BaseT3=[11][1110蓝桥杯备赛[day02]3月16日|python|复习回顾|背诵枚举模版

蓝桥杯 算法提高 递推求值

蓝桥杯备赛刷题

蓝桥杯备赛刷题

蓝桥杯备赛--二分查找

蓝桥杯备赛--二分查找