矩阵快速幂

矩阵快速幂

乘法快速幂

代码

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;
    }
相关推荐
wuminyu1 小时前
Kafka中sendfile与mmap实现机制解析
java·linux·c语言·jvm·c++
GreenTea2 小时前
vLLM 与 SGLang KV Cache 底层实现机制深度调研报告
前端·后端·算法
考虑考虑2 小时前
Java实现hmacsha256加密算法
java·后端·java ee
Bode_20022 小时前
多资源规划(含生产调度、库存管理及产能规划)的创新优化算法
算法·调度
captain3763 小时前
▲网络原理(2)-TCP
java·服务器·网络·tcp/ip·java-ee
MetaLite3 小时前
SpringBoot接口分层规范-外网网关内部服务与参数边界
java·数据库·spring boot
Co_Hui3 小时前
Java 线程状态
java
土司大王3 小时前
LeetCode hot100——35.搜索插入位置:Java 二分模板、左闭右开区间与插入点分析
java·算法·leetcode
微三云生态系统架构师-彭丹4 小时前
远方好物S2B2C系统架构:一级分销与保证金托管的合规技术实现
人工智能·算法
土司大王4 小时前
LeetCode hot100——34.在排序数组中查找元素的第一个和最后一个位置:Java 二分模板、边界分析
java·算法·leetcode