关于快速幂、快速乘、矩阵快速幂

1、快速幂函数

快速幂是用于解决相似 $a^b$ $mod$ $p$值类型的问题的。使用普通的方法是从$1$循环至$b$,再逐次累乘,逐次取模。但这种方法对于$b$很大的时候却可能会超时。那么,这时候咱们就须要使用快速幂了。优化

快速幂是基于如下式子:spa

若$b$ $mod$ $2=1$,则$a^b=a^\frac{b}{2}\times a^\frac{b}{2}\times a$code

若$b$ $mod$ $2=0$,则$a^b=a^\frac{b}{2}\times a^\frac{b}{2}$blog

这样,咱们便经过分治将一个大问题变为两个小问题,再逐项计算,并取模。ci

另外,再加上两个边界条件:class

$a^0=1$,$a^1=a$es7

例以下面的例子:循环

$3^7=3^3\times3^3\times3=(3^1\times3^1\times3)\times(3^1\times3^1\times3)\times 3$程序

其中,全部的式子均可以直接进行计算了,其时间复杂度为$\Theta(log_2b)$。

其程序以下:

int _pow(int a,int b){
    if(b==0)return 1;
    if(b==1)return a;
    int res=_pow(a,b/2);
    if(b%2)return res*res*a;
    return res*res;      
}

 

2、快速乘

快速乘常与快速幂结合在一块儿。当模数$p$过大时,乘起来可能会超过$long$ $long$的范围。因此,咱们也能够借助快速幂的思想在中间优化一下乘法。

注意到乘法$a\times b$能够转化为$\underbrace{a+a+...+a}_{b}$,因此咱们也可以经过分治方法将其转化。

例以下面的例子:

$3\times7=3\times3+3\times3+3=(3\times1+3\times1+3)+(3\times1+3\times1+3)+3$

其中,全部的式子也能够进行计算,复杂度依然为$\Theta(log_2b)$。

快速乘的程序与快速幂极为相似,只不过将乘换为加而已。

3、矩阵快速幂

矩阵快速幂能够用于求一个某一个函数值是须要从前若干项函数值线性递推过来的函数(也称一次多阶递推式)某一项值。

即求函数$f(n)=a_1f(n-1)+a_2f(n-2)+...+a_mf(n-m)$的$f(n)$的值。普通方法其时间复杂度为$\Theta(n\times m)$。在$n$比较大时会出现超时状况。因此,咱们应找一个新的实现方法。

这个实现方法即为矩阵。

那么首先,咱们须要了解一些关于矩阵的知识。

矩阵是有定义乘法的。可是,不是全部的两个矩阵都能相乘。

两个矩阵$A$和$B$可以相乘,当且仅当$A$的列数等于$B$的行数。

可是,两个矩阵相乘法则,不是这里所讨论的。咱们只须要知道如何可以使用矩阵推出$f(n)$。

举个例子,简单的$Fibonacci$数列,咱们能够获得:

$\begin{bmatrix} f(n) \\\ f(n-1) \end{bmatrix}=\begin{bmatrix} 1&1 \\\ 1&0 \end{bmatrix}\cdot\begin{bmatrix} f(n-1) \\\ f(n-2) \end{bmatrix}$

一直递推下去,就能获得一个矩阵公式:

$\begin{bmatrix} f(n+1) \\\ f(n) \end{bmatrix}=\begin{bmatrix} 1&1 \\\ 1&0 \end{bmatrix}^n\cdot\begin{bmatrix} f(2) \\\ f(1) \end{bmatrix}$

再回到通常状况,咱们要从

$\begin{bmatrix}f(n)\\f(n-1)\\\ \vdots\\f(n-m)\end{bmatrix}$推出$\begin{bmatrix}f(n+1)\\f(n)\\\ \vdots\\f(n-m+1)\end{bmatrix}$

其中,$f(n)$,$f(n-1)...f(n-m+1)$在原矩阵中均有出现,因此,经过构造$0$和$1$咱们就能够推出。咱们如今只须要算出$f(n)=a_1f(n-1)+a_2f(n-2)+...+a_mf(n-m)$。即构造矩阵的第一行为$\begin{bmatrix}a_1&a_2&...&a_m\end{bmatrix}$。如下全部行分别只含$0$和$1$,即第$i+1$行在第$i$列的值为$1$,其余全部值全为$0$.

其中,矩阵能够进行快速幂,这样就能够经过快速幂的$\Theta(log_2n)$时间复杂度解决一次多阶递推式。

相关文章
相关标签/搜索