矩阵快速幂

矩阵快速幂

乘法快速幂

代码

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;
    }
相关推荐
企业数字化笔记几秒前
视频人体姿态怎么做三维可视化?2D关键点、深度局限与技术选型
人工智能·算法·音视频
金銀銅鐵32 分钟前
[Java] 用 GUI 展示 EnumSet 增减元素时的内部变化(下)
java·后端·ai编程
?abc!40 分钟前
(数组)581. 最短无序连续子数组
数据结构·算法·leetcode
AI人工智能+电脑小能手44 分钟前
一次请求打几个下游,这个Java并行任务工具类6个方法按序聚合
java·线程池·并发编程·1024程序员节·批量处理·并行任务
paopaokaka_luck2 小时前
心理咨询管理系统(WebSocket实时沟通、基于用户的协同过滤、 ECharts多维分析、 预约业务流程、预约校验与定时处理)
java·vue.js·spring boot·mysql·spring·echarts·1024程序员节
2301_32241428043 小时前
springboot农产品交易平台的设计与实现08055-计算机毕设 原创(免费领源码+部署教程+开发环境)
java·spring boot·redis·mysql·tomcat·maven·mybatis
小郎君6583 小时前
MPTT树复选框的半选状态:一棵百万节点树从递归到计数器,再到区间覆盖
算法
酌沧3 小时前
MemT让记忆成为模型内生能力
jvm·人工智能·算法
考虑考虑4 小时前
JDK26的JEP 500属性
java·后端·java ee
LMT流氓兔4 小时前
第五单元——第十二课:把脚本整理成项目
java·数据库·python·langchain·1024程序员节