矩阵快速幂

矩阵快速幂

乘法快速幂

代码

java 复制代码
// 二进制拆分 + 倍增思想
//  5 的 二进制  101 , 2 ^ 5  =  2 ^ 4  *  2;
int quickpow(int a , int n) {
    int res =1 ;
    while(n>0) {
        if((n&1) ==1) {
            res*=a;
        }
        a = a*a;
        n>>=1;
    }
    return res;
}

矩阵快速幂

只要状态转移是线性的,就能写成矩阵乘法。

代码

java 复制代码
  /**
     * 矩阵乘法
     * @param a int[][]
     * @param b int[][]
     * @return ans int[][]
     */
    public static int[][] multiply(int[][]a,int[][]b){
        int n = a.length;
        int m = b[0].length;
        int k = a[0].length;
        int [][] ans = new int[n][m];
        for(int i =0;i<n;i++){
            for(int j =0;j<m;j++){
                for(int c =0;c<k;c++){
                    ans[i][j] += a[i][c] * b[c][j];
                }
            }
        }
        return ans;
    }
    /**
     * 矩阵快速幂
     * @param matrix int[][] 必须是方阵
     * @param k int
     * @return int[][]
     */
    public static int[][] matrixPower(int[][] matrix, int k) {
        int n = matrix.length;
        int[][] res = new int[n][n];

        // 1.初始化单位矩阵
        for (int i = 0; i < n; i++) {
            res[i][i] = 1;
        }
        // 2. 快速幂计算
        while (k > 0) {
            if ((k & 1) == 1) {
                res = multiply(res, matrix);
            }
            matrix = multiply(matrix, matrix);
            k >>= 1;
        }
        return res;
    }
相关推荐
砚底藏山河2 分钟前
量化实战:行情数据 Schema 演进与向后兼容
java·python·金融·maven
专业程序开发源3 分钟前
flask动漫推荐系统32319-计算机课程设计、毕业设计
java·spring boot·后端·django·flask·php·课程设计
根目录下的猫4 分钟前
ROS 2 C++(rclcpp)版本,实现话题订阅、话题发布,以及完整编译运行流程
开发语言·c++·算法
FYKJ_20109 分钟前
springboot手工蜀绣在线销售系统60947-计算机课程设计、毕业设计
java·spring boot·后端·python·mysql·spark·课程设计
vx_Biye_Design12 分钟前
springboot老年人用药智能管理系统38605-计算机课程设计、毕业设计
java·spring boot·后端·python·django·课程设计·express
QQ_216962909616 分钟前
基于C#(Asp.net)电竞陪玩信息管理系统的设计与实现
java·大数据·spring boot·微信小程序·c#·云计算·asp.net
vx_Biye_Design18 分钟前
springbootNBA数据分析系统平台42434-计算机课程设计、毕业设计
java·vue.js·spring boot·python·django·课程设计·express
Q264336502318 分钟前
【有源码】基于springboot的知识产权管理系统-知识产权咨询问答管理系统-知识产权价值评估管理系统
java·spring boot·mysql·spring·毕业设计·javaweb·课程设计
大侠归来2 小时前
C 语言 | 在函数中操作数组
c语言·c++·算法
怕浪猫7 小时前
GEO 优化到底是什么?AI时代内容创作者必须懂的新技能
算法·面试·github