应用场景是求解形式的连续幂次元算,可以是数值或矩阵形式。经典算法题为斐波那契数列问题。
快速幂的核心思想是将以二进制方式表示成,则所要求解的原式可以表示为,取值为0或1取决于二进制表示的n在位的值,。。可以看到随着增加1则为上一个的平方。亦可从公式推导。
按上述原理可写成如下的代码,其中multiply是所有可乘的方法的抽象表示,例如数值乘,矩阵乘。
时间复杂度:
空间复杂度:
result = 1; // 或I单位矩阵
base = M;
while (n > 0) {
if (n & 1) { // a_i = 1
result = multiply(result, base);
}
base = multiply(base, base);
n >> 1;
}