行列式基础知识

· · 算法·理论

1 前置知识

1.1 排列

n 个元素按任意顺序,排成一列,称为n 个元素的排列

例: 3,1,2

1.2 逆序对、逆序数、奇偶排列

对于排列 a_1,a_2,…a_n ,若 a_i>a_j ,且 i<j 则称 (a_i,a_j) 为一个逆序对

例:在排列 3,1,2 中,有2个逆序对 (3,1),(3,2)

排列 p 的逆序数:排列中逆序对的总数。

奇排列:逆序数是奇数的排列。

偶排列:逆序数是偶数的排列。

例:排列 3,1,2 的逆序数为 2 ,是偶排列。

1.3 对换

对换:交换排列中两个数,其余保持不变。

相邻对换:相邻的两个数对换。

定理1:对换改变排列的奇偶性

证明思路:相邻对换会使逆序数+1或-1,而任意一次对换等价于奇数次相邻对换,奇偶性改变奇数次,奇偶性改变。

2 行列式

2.1 定义

对于一个 n×n 矩阵 A ,它的行列式是一个标量,记作 |A|det(A)

det(A)=\displaystyle\sum_P (-1)^{σ(P)} \displaystyle\prod_{i=1}^n a_{i,P_i}

枚举所有 n 个数字的排列,其中 P 表示一个 n 个数字的排列, P_i 表示排列 P 中的第 i 个数, σ(P) 为排列 P 的逆序数。

通俗的说,就是从上往下从每行挑一个数,同时保证每列只挑了一个数,将这 n 个数乘起来。再看这次挑选的排列的逆序数奇偶,若为奇排列就再乘 -1 ,最后加到最终的结果上。

这种情况下怎么数逆序对呢?你看公式啊。 ab 的左下方, ab 就构成逆序对(即 a 的行数大于 b 的行数,但 a 的列数小于 b 的行数)

例子:

\begin{aligned} det(A)=&\left | \begin{matrix} a_{1,1} & a_{1,2} & a_{1,3} \\ a_{2,1} & a_{2,2} & a_{2,3} \\ a_{3,1} & a_{3,2} & a_{3,3} \end{matrix} \right | \\ = & +a_{1,1}a_{2,2}a_{3,3} - a_{1,1}a_{2,3}a_{3,2} \\ & - a_{1,2}a_{2,1}a_{3,3} + a_{1,2}a_{2,3}a_{3,1} \\ & + a_{1,3}a_{2,1}a_{3,2} - a_{1,3}a_{2,2}a_{3,1} \end{aligned}

2.2 性质

以下性质及其证明对所有行列式都可成立,这里拿 3×3 的行列式举例。

性质1:两行互换,行列式的值变为相反数。

例:

\begin{aligned} \left | \begin{matrix} a_{1,1} & a_{1,2} & a_{1,3} \\ a_{2,1} & a_{2,2} & a_{2,3} \\ a_{3,1} & a_{3,2} & a_{3,3} \end{matrix} \right | = - \left | \begin{matrix} a_{2,1} & a_{2,2} & a_{2,3} \\ a_{1,1} & a_{1,2} & a_{1,3} \\ a_{3,1} & a_{3,2} & a_{3,3} \end{matrix} \right | \end{aligned}

证明思路:两行互换相当于每一项的排列都发生了一次对换,奇偶性取反,所有每一项的符号都变为相反数,所有整体变为相反数

性质2:某行所有数乘上 k ,行列式的值就乘上 k

\begin{aligned} det(B)=&\left | \begin{matrix} a_{1,1} & a_{1,2} & a_{1,3} \\ ka_{2,1} & ka_{2,2} & ka_{2,3} \\ a_{3,1} & a_{3,2} & a_{3,3} \end{matrix} \right | \\ = & + a_{1,1}ka_{2,2}a_{3,3} - a_{1,1}ka_{2,3}a_{3,2} \\ & - a_{1,2}ka_{2,1}a_{3,3} + a_{1,2}ka_{2,3}a_{3,1} \\ & + a_{1,3}ka_{2,1}a_{3,2} - a_{1,3}ka_{2,2}a_{3,1} \\ = & \; det(A)×k \end{aligned}

性质3:若某一行的元素都是两数之和,则行列式的值为以下(看公式)两个行列式的值之和。

\begin{aligned} &\left | \begin{matrix} a_{1,1} & a_{1,2} & a_{1,3} \\ a_{2,1}+a'_{2,1} & a_{2,2}+a'_{2,1} & a_{2,3}+a'_{2,1} \\ a_{3,1} & a_{3,2} & a_{3,3} \end{matrix} \right | \\ = & \left | \begin{matrix} a_{1,1} & a_{1,2} & a_{1,3} \\ a_{2,1} & a_{2,2} & a_{2,3} \\ a_{3,1} & a_{3,2} & a_{3,3} \end{matrix} \right | + \left | \begin{matrix} a_{1,1} & a_{1,2} & a_{1,3} \\ a'_{2,1} & a'_{2,2} & a'_{2,3} \\ a_{3,1} & a_{3,2} & a_{3,3} \end{matrix} \right | \end{aligned}

证明思路:按定义展开,然后用乘法分配律。

性质4:若有两行成比例,则行列式的值为 0

证明思路:

\begin{aligned} det(C)=&\left | \begin{matrix} a_{1,1} & a_{1,2} & a_{1,3} \\ ka_{1,1} & ka_{1,2} & ka_{1,3} \\ a_{3,1} & a_{3,2} & a_{3,3} \end{matrix} \right | \\ = &\left | \begin{matrix} a_{1,1} & a_{1,2} & a_{1,3} \\ a_{1,1} & a_{1,2} & a_{1,3} \\ a_{3,1} & a_{3,2} & a_{3,3} \end{matrix} \right | × k\\ \end{aligned}

将上一个行列式 1,2 行互换,得到

\begin{aligned} \left | \begin{matrix} a_{1,1} & a_{1,2} & a_{1,3} \\ a_{1,1} & a_{1,2} & a_{1,3} \\ a_{3,1} & a_{3,2} & a_{3,3} \end{matrix} \right | = - \left | \begin{matrix} a_{1,1} & a_{1,2} & a_{1,3} \\ a_{1,1} & a_{1,2} & a_{1,3} \\ a_{3,1} & a_{3,2} & a_{3,3} \end{matrix} \right | \\ \end{aligned}

解得

\begin{aligned} \left | \begin{matrix} a_{1,1} & a_{1,2} & a_{1,3} \\ a_{1,1} & a_{1,2} & a_{1,3} \\ a_{3,1} & a_{3,2} & a_{3,3} \end{matrix} \right | = 0 \end{aligned}

det(C) = 0 × k = 0

性质5:将某行的所有数乘上一个数 k ,加到另一行对应的数上去,行列式值不变。

\begin{aligned} \left | \begin{matrix} a_{1,1} & a_{1,2} & a_{1,3} \\ a_{2,1} & a_{2,2} & a_{2,3} \\ a_{3,1} & a_{3,2} & a_{3,3} \end{matrix} \right | = \left | \begin{matrix} a_{1,1}+ka_{2,1} & a_{1,2}+ka_{2,2} & a_{1,3}+ka_{2,3} \\ a_{2,1} & a_{2,2} & a_{2,3} \\ a_{3,1} & a_{3,2} & a_{3,3} \end{matrix} \right | \end{aligned}

证明思路:先用性质3,再用性质4。

\begin{aligned} &\left | \begin{matrix} a_{1,1}+ka_{2,1} & a_{1,2}+ka_{2,2} & a_{1,3}+ka_{2,3} \\ a_{2,1} & a_{2,2} & a_{2,3} \\ a_{3,1} & a_{3,2} & a_{3,3} \end{matrix} \right | \\ = & \left | \begin{matrix} a_{1,1} & a_{1,2} & a_{1,3} \\ a_{2,1} & a_{2,2} & a_{2,3} \\ a_{3,1} & a_{3,2} & a_{3,3} \end{matrix} \right | + \left | \begin{matrix} ka_{2,1} & ka_{2,2} & ka_{2,3} \\ a_{2,1} & a_{2,2} & a_{2,3} \\ a_{3,1} & a_{3,2} & a_{3,3} \end{matrix} \right | \\ = & \left | \begin{matrix} a_{1,1} & a_{1,2} & a_{1,3} \\ a_{2,1} & a_{2,2} & a_{2,3} \\ a_{3,1} & a_{3,2} & a_{3,3} \end{matrix} \right | + 0 \end{aligned}

3 求行列式

3.1 就硬算 按定义展开

det(A)=\displaystyle\sum_P (-1)^{σ(P)} \displaystyle\prod_{i=1}^n a_{i,P_i}

行列式按定义展开一共有 n! 项,每项有 n 个数相乘,时间复杂度 Θ(n×n!)

3.2 上三角行列式

主对角线:过 a_{i,i},i∈[1,n] 的对角线(从左上↖到右下↘的对角线)

\begin{aligned} det(D)=\left | \begin{matrix} a_{1,1} & a_{1,2} & a_{1,3} \\ 0 & a_{2,2} & a_{2,3} \\ 0 & 0 & a_{3,3} \end{matrix} \right | = a_{1,1} a_{2,2} a_{3,3} \end{aligned}

上三角行列式的值等于主对角线上所有数之积

按定义展开上三角行列式,发现只有一项不含 0 ,这一项包含主对角线上所有数。

证明思路:

先从倒数第 1 行选数,发现只能选最后一个数,因为选其它的最后算出来都是 0

再从倒数第 2 行选数,发现只能选倒数第 2 个数,因为最后一列已经选过了,而选其它的算出来都是 0

再从倒数第 3 行选数,发现只能选倒数第 3 个数,因为最后两列已经选过了,而选其它的算出来都是 0

......

计算上三角行列式的值,时间复杂度 Θ(n)

3.3 辗转相除法

辗转相除法可把行列式化为上三角行列式

详见代码