矩阵快速幂

矩阵快速幂

乘法快速幂

代码

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;
    }
相关推荐
酿情师11 分钟前
区块链共识算法深度拆解:PoW、PoS、PBFT、Raft 原理解析
算法·区块链·共识算法
MindUp11 分钟前
企业网盘权限模型解析:多层级访问控制与审计能力选型指南
java·linux·运维
hansang_IR19 分钟前
【记录】「SCOI2016」三道模拟赛/26.7.12
c++·算法
NG47721 分钟前
【软件设计与体系结构】-策略设计模式
java·设计模式·软件工程
退休倒计时36 分钟前
【每日一题】LeetCode 39. 组合总和 TypeScript
算法·leetcode·typescript
不是az42 分钟前
力控相关知识点
算法·机器学习·最小二乘法
程序员天天困1 小时前
优雅记录操作日志:从注解到 SpEL 的全链路实践与开源方案对比
java·后端
战血石LoveYY1 小时前
Integer类型超限,导致数据异常
java·算法
紫金修道1 小时前
PnP算法介绍(Perspective-n-Point)
算法
乐观的Terry3 小时前
1、为什么要自己造发布系统
java·spring boot·后端·spring cloud·架构