核心概述:提供对方阵的基础操作(矩阵乘法、向量乘法与幂运算)的泛型矩阵类型,用于表示与计算线性变换与线性递推。

原文引述:

Description: Basic operations on square matrices. Usage: Matrix<int, 3> A; A.d = {{{{1,2,3}}, {{4,5,6}}, {{7,8,9}}}}; array<int, 3> vec = {1,2,3}; vec = (A^N) * vec; Status: tested

展开阐述:

  • 定义与数据结构
    • 模板定义:template<class T, int N> struct Matrix,内部以 array<array<T, N>, N> d 存储 N×N 方阵。
    • 通过类型参数 T 指定元素类型(如 int/long long/模数域元素等),通过非类型参数 N 固定维度。
  • 接口与操作语义(据实现)
    • 矩阵乘法:M operator*(const M& m) const
      • 标准三重循环,C[i][j] = Σ_k A[i][k] * B[k][j]。
    • 矩阵与向量乘法:array<T,N> operator*(const array<T,N>& vec) const
      • 逐行点乘,res[i] = Σ_j A[i][j] * vec[j]。
    • 快速幂:M operator^(ll p) const
      • 要求 p ≥ 0;采用二进制快速幂:a 置为单位矩阵 I,b 置为当前矩阵;按位检查 p,如果该位为 1 则 a = a * b;每步 b = b * b;p 右移,返回 a。
  • 复杂度与边界条件
    • 乘法 O(N^3),向量乘法 O(N^2),快速幂 O(log p) 次矩阵乘法总计 O(N^3 log p)。
    • 幂的底为方阵,p=0 时返回单位矩阵;p>0 返回相应幂次。
    • 元素类型 T 需闭合于加法与乘法;注意溢出(如使用 long long 时的乘加溢出风险)。
  • 实现细节与工程要点
    • 单位矩阵构造:对角线置 1,其余置 0;确保作为快速幂的幺元。
    • 若在模数域下运算,请在乘加时取模,保证数值稳定。
    • 若 N 较大,可考虑分块乘法或其他优化(本节点保持基础实现)。
  • 适用场景与对比
  • 正确性直觉
    • 矩阵乘法满足结合律,快速幂在半群结构下成立;单位矩阵作为乘法幺元保证 0 次幂合理性。

关联节点