蓝桥杯备赛--教你用矩阵优化递推
Posted 你,好
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了蓝桥杯备赛--教你用矩阵优化递推相关的知识,希望对你有一定的参考价值。
先导知识
- 矩阵乘法
[ 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]
由此可见矩阵乘法不满足交换律! - 单位矩阵(矩阵对角线为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(n−1)+Fib(n−2)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(n−1) 和
F
i
b
(
n
−
2
)
Fib(n-2)
Fib(n−2) 决定的。
那么我们就可以构造一个状态转移矩阵 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(n−1)Fib(n−2)]∗[11]
=
F
i
b
(
n
−
1
)
+
F
i
b
(
n
−
2
)
= Fib(n-1)+Fib(n-2)
=Fib(n−1)+Fib(n−2)
=
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(n−1),所以还需要求一下
F
i
b
(
n
−
1
)
Fib(n-1)
Fib(n−1)。
[
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(n−1)Fib(n−2)]∗[10]
=
F
i
b
(
n
−
1
)
= Fib(n-1)
=Fib(n−1)
所以这个 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
Base∗T3=[11]∗[1110蓝桥杯备赛[day02]3月16日|python|复习回顾|背诵枚举模版