核心概述

在整数矩阵上精确计算行列式,采用 Bareiss 无分数消元或多素模取 det 后用 CRT 重建,时间复杂度 O(n^3)。

原文引述

Description: Exact integer determinant via Bareiss fraction-free elimination (O(n^3)). Alternative: compute det mod several primes and reconstruct with CRT using a Hadamard bound for correctness. Time: O(n^3) Status: tested ——摘自本节点现有英文注释

展开阐述

  • 定义与背景、典型场景

    • 整数行列式(Integer Determinant):对整矩阵 A 计算 det(A) 的精确整数值。
    • 适用于需要确切整数结果且避免浮点误差的场景;当元素/规模较大时可转用多模重建。
  • 接口/字段/数据结构与输入输出语义(据实现约定)

    • long long detBareiss(vector<vector> A)
      • 输入:n×n 整数矩阵 A(可按值传递以就地消元)。
      • 输出:det(A);当可能超出 64 位时需使用更大整数类型。
    • long long detCRT(const vector<vector>& A)
  • 核心流程与关键要点

    • Bareiss(无分数消元)
      • 初始化 prev=1,sgn=1;逐列选择非零主元,必要时交换行并更新符号。
      • 消元更新:A[i][j] = (A[i][j]*A[k][k] − A[i][k]*A[k][j]) / prev(k=0 时 prev=1),对整数矩阵应整除。
      • 迭代结束 det = sgn * A[n−1][n−1];全程整数运算,避免分数放大。
      • 中间乘法可用 __int128 保护(见 090-数论-长整型模乘 的安全乘思路)。
    • CRT 重建(可选)
  • 数值稳定性/精度注意

    • Bareiss 中整除性应成立;若出现不整除多为实现/溢出问题。
    • 溢出风险:元素大/规模大时优先 CRT 或大整数类型。
    • 行/列交换每次改变符号;sgn 需独立维护。
  • 复杂度与边界条件、常见变体

    • Bareiss:O(n^3)。
    • CRT:每个模 O(n^3),t 个模为 O(t·n^3);常见 t∈{2..4}。
    • 097-数值算法-行列式 的关系:浮点法有数值误差,整数需求使用 Bareiss/CRT。

关联节点

关联节点