跳转至

行列式

逆序数

定义 \(p\) 为一个长度为 \(n\) 的排列,\(p_i\) 为这个排列的第 \(i\) 项。定义 \(\pi(p)\) 为排列 \(p\) 的逆序对数。若一个排列的逆序对数为奇数,则称这个排列是一个奇排列;若一个排列的逆序对数为偶数,则称这个排列是一个偶排列。

结论 1

交换排列 \(p\) 中的任意两项,排列 \(p\) 的奇偶性改变。

证明

假设交换后的排列为 \(p'\),交换的两项为 \(i, j\)\(i < j\)。如果 \(p_i < p_j\),那么 \(\pi(p') = \pi(p) + 1\);如果 \(p_i > p_j\),那么 \(\pi(p') = \pi(p) - 1\)。因此奇偶性改变。

结论 2

若对排列 \((1, 2, \cdots, n)\) 进行若干次交换得到排列 \(p\),那么交换次数的奇偶性与排列 \(p\) 的奇偶性相同。

证明

排列 \((1, 2, \cdots, n)\) 的逆序数是 \(0\),因此是一个偶排列,同时交换次数也是 \(0\)。每对其中两个数进行交换,都会改变排列的奇偶性,同时也改变交换次数的奇偶性,因此结论成立。

定义

对于一个 \(n\)方阵 \(A\),定义 \(A\) 的行列式为 \(\det A\)

\[ \det A = \det \begin{pmatrix} a_{1, 1} & a_{1, 2} & a_{1, 3} & \cdots & a_{1, n} \\ a_{2, 1} & a_{2, 2} & a_{2, 3} & \cdots & a_{2, n} \\ a_{3, 1} & a_{3, 2} & a_{3, 3} & \cdots & a_{3, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{n, 1} & a_{n, 2} & a_{n, 3} & \cdots & a_{n, n} \\ \end{pmatrix} = \sum_{p} (-1)^{\pi(p)} \prod_{j = 1}^n a_{j, p_j} \\ \]

其中,\(\sum_p\) 表示枚举全排列。

性质

性质 1

一个方阵的行列式和其转置的行列式相等,即 \(\det A = \det A^T\)

证明

对于一个排列 \(p\),我们需要找到一个排列 \(p'\),使得若 \(i = p'_j\),那么有 \(j = p_i\),此时有 \(a_{i, p_i} = a_{p'_j, j}\),因此 \(\prod_{i = 1}^n a_{i, p_i} = \prod_{i = 1}^n a_{p'_i, i}\)。这个 \(p'\) 可以通过交换 \(a\) 的顺序得到。我们将下标看成一个二元组,排列 \(p\) 对应的下标为 \((i, p_i)\)\(p'\) 对应 \((p'_i, i)\),我们按第二个值排序(冒泡排序),相当于将第二个值交换得到排列 \((1, 2, \cdots, n)\),交换次数的奇偶性与 \(p\) 的奇偶性相同。此时, 第一个值相当于从排列 \((1, 2, \cdots, n)\) 交换得到排列 \(p'\),因此交换次数的奇偶性与 \(p'\) 的奇偶性相同。容易看出 \(p\)\(p'\) 奇偶性相同,前面的系数 \((-1)^{\pi(p)} = (-1)^{\pi(p')}\)。同时,因为这是个排序过程,不同的排列 \(p, q\) 一定会有与之对应的 \(p', q'\),同时它们也互不相同,因此有:

\[ \sum_{p} (-1)^{\pi(p)} \prod_{j = 1}^n a_{j, p_j} = \sum_{p} (-1)^{\pi(p)} \prod_{j = 1}^n a_{p_j, j} \\ \]

注意到等号右边即为转置矩阵的行列式,因此结论成立。

注意

接下来的性质对于行和列都成立,但只证明行的情况,列的情况可以由转置矩阵的行列式得到。


性质 2

若一个方阵的一行(列)全为 \(0\),那么行列式为 \(0\),即:

\[ \det \begin{pmatrix} a_{1, 1} & a_{1, 2} & a_{1, 3} & \cdots & a_{1, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & 0 & \cdots & 0 \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{n, 1} & a_{n, 2} & a_{n, 3} & \cdots & a_{n, n} \\ \end{pmatrix} = 0 \\ \]
证明
\[ \begin{aligned} &\det \begin{pmatrix} a_{1, 1} & a_{1, 2} & a_{1, 3} & \cdots & a_{1, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & 0 & \cdots & 0 \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{n, 1} & a_{n, 2} & a_{n, 3} & \cdots & a_{n, n} \\ \end{pmatrix} \\ =& \sum_{p} (-1)^{\pi(p)} \left(\prod_{j = 1}^{m - 1} a_{j, p_j} \right) k \times 0 \times \left(\prod_{j = m + 1}^n a_{j, p_j} \right) \\ =& 0 \\ \end{aligned} \]

性质 3

一个方阵的一行(列)若乘上 \(k\),那么行列式的值也乘 \(k\),即:

\[ \det \begin{pmatrix} a_{1, 1} & a_{1, 2} & a_{1, 3} & \cdots & a_{1, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ k a_{m, 1} & k a_{m, 2} & k a_{m, 3} & \cdots & k a_{m, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{n, 1} & a_{n, 2} & a_{n, 3} & \cdots & a_{n, n} \\ \end{pmatrix} = k \det \begin{pmatrix} a_{1, 1} & a_{1, 2} & a_{1, 3} & \cdots & a_{1, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{m, 1} & a_{m, 2} & a_{m, 3} & \cdots & a_{m, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{n, 1} & a_{n, 2} & a_{n, 3} & \cdots & a_{n, n} \\ \end{pmatrix} \\ \]
证明
\[ \begin{aligned} &\det \begin{pmatrix} a_{1, 1} & a_{1, 2} & a_{1, 3} & \cdots & a_{1, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ k a_{m, 1} & k a_{m, 2} & k a_{m, 3} & \cdots & k a_{m, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{n, 1} & a_{n, 2} & a_{n, 3} & \cdots & a_{n, n} \\ \end{pmatrix} \\ =& \sum_{p} (-1)^{\pi(p)} \left(\prod_{j = 1}^{m - 1} a_{j, p_j} \right) k a_{m, p_m} \left(\prod_{j = m + 1}^n a_{j, p_j} \right) \\ =& k \sum_{p} (-1)^{\pi(p)} \left(\prod_{j = 1}^{m - 1} a_{j, p_j} \right) a_{m, p_m} \left(\prod_{j = m + 1}^n a_{j, p_j} \right) \\ =& k \det \begin{pmatrix} a_{1, 1} & a_{1, 2} & a_{1, 3} & \cdots & a_{1, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{m, 1} & a_{m, 2} & a_{m, 3} & \cdots & a_{m, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{n, 1} & a_{n, 2} & a_{n, 3} & \cdots & a_{n, n} \\ \end{pmatrix} \\ \end{aligned} \]

性质 4

我不知道怎么描述这个性质

\[ \begin{aligned} &\det \begin{pmatrix} a_{1, 1} & a_{1, 2} & a_{1, 3} & \cdots & a_{1, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{m, 1} + b_1 & a_{m, 2} + b_2 & a_{m, 3} + b_3 & \cdots & a_{m, n} + b_n \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{n, 1} & a_{n, 2} & a_{n, 3} & \cdots & a_{n, n} \\ \end{pmatrix} \\ =& \det \begin{pmatrix} a_{1, 1} & a_{1, 2} & a_{1, 3} & \cdots & a_{1, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{m, 1} & a_{m, 2} & a_{m, 3} & \cdots & a_{m, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{n, 1} & a_{n, 2} & a_{n, 3} & \cdots & a_{n, n} \\ \end{pmatrix} + \det \begin{pmatrix} a_{1, 1} & a_{1, 2} & a_{1, 3} & \cdots & a_{1, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ b_1 & b_2 & b_3 & \cdots & b_n \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{n, 1} & a_{n, 2} & a_{n, 3} & \cdots & a_{n, n} \\ \end{pmatrix} \\ \end{aligned} \]
证明
\[ \begin{aligned} &\det \begin{pmatrix} a_{1, 1} & a_{1, 2} & a_{1, 3} & \cdots & a_{1, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{m, 1} + b_1 & a_{m, 2} + b_2 & a_{m, 3} + b_3 & \cdots & a_{m, n} + b_n \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{n, 1} & a_{n, 2} & a_{n, 3} & \cdots & a_{n, n} \\ \end{pmatrix} \\ =& \sum_{p} (-1)^{\pi(p)} \left(\prod_{j = 1}^{m - 1} a_{j, p_j} \right) (a_{m, p_m} + b_{p_m}) \left(\prod_{j = m + 1}^n a_{j, p_j} \right) \\ =& \sum_{p} (-1)^{\pi(p)} \left(\prod_{j = 1}^{m - 1} a_{j, p_j} \right) a_{m, p_m} \left(\prod_{j = m + 1}^n a_{j, p_j} \right) + \sum_{p} (-1)^{\pi(p)} \left(\prod_{j = 1}^m a_{j, p_j} \right) b_{p_m} \left(\prod_{j = m + 1}^n a_{j, p_j} \right) \\ =& \det \begin{pmatrix} a_{1, 1} & a_{1, 2} & a_{1, 3} & \cdots & a_{1, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{m, 1} & a_{m, 2} & a_{m, 3} & \cdots & a_{m, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{n, 1} & a_{n, 2} & a_{n, 3} & \cdots & a_{n, n} \\ \end{pmatrix} + \det \begin{pmatrix} a_{1, 1} & a_{1, 2} & a_{1, 3} & \cdots & a_{1, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ b_1 & b_2 & b_3 & \cdots & b_n \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{n, 1} & a_{n, 2} & a_{n, 3} & \cdots & a_{n, n} \\ \end{pmatrix} \\ \end{aligned} \]

性质 5

交换任意两行(列),行列式变为原来的相反数,即:

\[ \det \begin{pmatrix} a_{1, 1} & a_{1, 2} & a_{1, 3} & \cdots & a_{1, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{m, 1} & a_{m, 2} & a_{m, 3} & \cdots & a_{m, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{q, 1} & a_{q, 2} & a_{q, 3} & \cdots & a_{q, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{n, 1} & a_{n, 2} & a_{n, 3} & \cdots & a_{n, n} \\ \end{pmatrix} = -\det \begin{pmatrix} a_{1, 1} & a_{1, 2} & a_{1, 3} & \cdots & a_{1, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{q, 1} & a_{q, 2} & a_{q, 3} & \cdots & a_{q, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{m, 1} & a_{m, 2} & a_{m, 3} & \cdots & a_{m, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{n, 1} & a_{n, 2} & a_{n, 3} & \cdots & a_{n, n} \\ \end{pmatrix} \\ \]
证明
\[ \begin{aligned} &\det \begin{pmatrix} a_{1, 1} & a_{1, 2} & a_{1, 3} & \cdots & a_{1, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{m, 1} & a_{m, 2} & a_{m, 3} & \cdots & a_{m, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{q, 1} & a_{q, 2} & a_{q, 3} & \cdots & a_{q, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{n, 1} & a_{n, 2} & a_{n, 3} & \cdots & a_{n, n} \\ \end{pmatrix} \\ =& \sum_{p} (-1)^{\pi(p)} \prod_{j = 1}^n a_{j, p_j} \\ \end{aligned} \]

假设排列 \(p' = (p_1, \cdots, p_q, \cdots, p_m, \cdots p_n)\),可以看出,\(p'\) 是通过在 \(p\) 中交换两个元素的位置得到的,因此 \(p'\) 的奇偶性与 \(p\) 相反。同时,因此有:

\[ \begin{aligned} & \sum_{p} (-1)^{\pi(p)} \prod_{j = 1}^n a_{j, p_j} \\ =& -\sum_{p'} (-1)^{\pi(p')} \prod_{j = 1}^n a_{j, p'_j} \\ =& -\det \begin{pmatrix} a_{1, 1} & a_{1, 2} & a_{1, 3} & \cdots & a_{1, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{q, 1} & a_{q, 2} & a_{q, 3} & \cdots & a_{q, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{m, 1} & a_{m, 2} & a_{m, 3} & \cdots & a_{m, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{n, 1} & a_{n, 2} & a_{n, 3} & \cdots & a_{n, n} \\ \end{pmatrix} \\ \end{aligned} \]

性质 6

若方阵的其中一行(列)是另一行(列)的 \(k\) 倍,那么行列式为 \(0\),即:

\[ \det \begin{pmatrix} a_{1, 1} & a_{1, 2} & a_{1, 3} & \cdots & a_{1, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{m, 1} & a_{m, 2} & a_{m, 3} & \cdots & a_{m, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ k a_{m, 1} & k a_{m, 2} & k a_{m, 3} & \cdots & k a_{m, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{n, 1} & a_{n, 2} & a_{n, 3} & \cdots & a_{n, n} \\ \end{pmatrix} \\ = 0 \\ \]
证明

首先考虑 \(k = 1\) 的情况。交换这两行,行列式变为相反数,但矩阵的形式不变,即:

\[ \begin{aligned} &\det \begin{pmatrix} a_{1, 1} & a_{1, 2} & a_{1, 3} & \cdots & a_{1, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{m, 1} & a_{m, 2} & a_{m, 3} & \cdots & a_{m, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{m, 1} & a_{m, 2} & a_{m, 3} & \cdots & a_{m, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{n, 1} & a_{n, 2} & a_{n, 3} & \cdots & a_{n, n} \\ \end{pmatrix} \\ =&-\det \begin{pmatrix} a_{1, 1} & a_{1, 2} & a_{1, 3} & \cdots & a_{1, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{m, 1} & a_{m, 2} & a_{m, 3} & \cdots & a_{m, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{m, 1} & a_{m, 2} & a_{m, 3} & \cdots & a_{m, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{n, 1} & a_{n, 2} & a_{n, 3} & \cdots & a_{n, n} \\ \end{pmatrix} \\ \end{aligned} \]

因此:

\[ \det \begin{pmatrix} a_{1, 1} & a_{1, 2} & a_{1, 3} & \cdots & a_{1, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{m, 1} & a_{m, 2} & a_{m, 3} & \cdots & a_{m, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{m, 1} & a_{m, 2} & a_{m, 3} & \cdots & a_{m, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{n, 1} & a_{n, 2} & a_{n, 3} & \cdots & a_{n, n} \\ \end{pmatrix} \\ = 0 \\ \]

对于 \(k \ne 1\) 的情况,有:

\[ \begin{aligned} &\det \begin{pmatrix} a_{1, 1} & a_{1, 2} & a_{1, 3} & \cdots & a_{1, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{m, 1} & a_{m, 2} & a_{m, 3} & \cdots & a_{m, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ k a_{m, 1} & k a_{m, 2} & k a_{m, 3} & \cdots & k a_{m, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{n, 1} & a_{n, 2} & a_{n, 3} & \cdots & a_{n, n} \\ \end{pmatrix} \\ =&k \det \begin{pmatrix} a_{1, 1} & a_{1, 2} & a_{1, 3} & \cdots & a_{1, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{m, 1} & a_{m, 2} & a_{m, 3} & \cdots & a_{m, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{m, 1} & a_{m, 2} & a_{m, 3} & \cdots & a_{m, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{n, 1} & a_{n, 2} & a_{n, 3} & \cdots & a_{n, n} \\ \end{pmatrix} \\ =& 0 \\ \end{aligned} \]

性质 7

一个方阵的一行(列)加上另一行(列)的若干倍,行列式的值不变,即:

\[ \begin{aligned} &\det \begin{pmatrix} a_{1, 1} & a_{1, 2} & a_{1, 3} & \cdots & a_{1, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{m, 1} & a_{m, 2} & a_{m, 3} & \cdots & a_{m, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{q, 1} + k a_{m, 1} & a_{q, 2} + k a_{m, 2} & a_{q, 3} + k a_{m, 3} & \cdots & a_{q, n} + k a_{m, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{n, 1} & a_{n, 2} & a_{n, 3} & \cdots & a_{n, n} \\ \end{pmatrix} \\ =&\det \begin{pmatrix} a_{1, 1} & a_{1, 2} & a_{1, 3} & \cdots & a_{1, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{m, 1} & a_{m, 2} & a_{m, 3} & \cdots & a_{m, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{q, 1} & a_{q, 2} & a_{q, 3} & \cdots & a_{q, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{n, 1} & a_{n, 2} & a_{n, 3} & \cdots & a_{n, n} \\ \end{pmatrix} \end{aligned} \]
证明

由性质 4 和性质 6,有:

\[ \begin{aligned} &\det \begin{pmatrix} a_{1, 1} & a_{1, 2} & a_{1, 3} & \cdots & a_{1, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{m, 1} & a_{m, 2} & a_{m, 3} & \cdots & a_{m, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{q, 1} + k a_{m, 1} & a_{q, 2} + k a_{m, 2} & a_{q, 3} + k a_{m, 3} & \cdots & a_{q, n} + k a_{m, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{n, 1} & a_{n, 2} & a_{n, 3} & \cdots & a_{n, n} \\ \end{pmatrix} \\ =&\det \begin{pmatrix} a_{1, 1} & a_{1, 2} & a_{1, 3} & \cdots & a_{1, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{m, 1} & a_{m, 2} & a_{m, 3} & \cdots & a_{m, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{q, 1} & a_{q, 2} & a_{q, 3} & \cdots & a_{q, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{n, 1} & a_{n, 2} & a_{n, 3} & \cdots & a_{n, n} \\ \end{pmatrix} + \det \begin{pmatrix} a_{1, 1} & a_{1, 2} & a_{1, 3} & \cdots & a_{1, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{m, 1} & a_{m, 2} & a_{m, 3} & \cdots & a_{m, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ k a_{m, 1} & k a_{m, 2} & k a_{m, 3} & \cdots & k a_{m, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{n, 1} & a_{n, 2} & a_{n, 3} & \cdots & a_{n, n} \\ \end{pmatrix} \\ =&\det \begin{pmatrix} a_{1, 1} & a_{1, 2} & a_{1, 3} & \cdots & a_{1, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{m, 1} & a_{m, 2} & a_{m, 3} & \cdots & a_{m, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{q, 1} & a_{q, 2} & a_{q, 3} & \cdots & a_{q, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{n, 1} & a_{n, 2} & a_{n, 3} & \cdots & a_{n, n} \\ \end{pmatrix} \end{aligned} \]

性质 8

上三角矩阵的行列式为对角线元素的乘积,即:

\[ \det \begin{pmatrix} a_{1, 1} & a_{1, 2} & a_{1, 3} & \cdots & a_{1, n} \\ 0 & a_{2, 2} & a_{2, 3} & \cdots & a_{2, n} \\ 0 & 0 & a_{3, 3} & \cdots & a_{3, n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & 0 & \cdots & a_{n, n} \\ \end{pmatrix} = \prod_{i = 1}^n a_{i, i} \\ \]
证明

在枚举全排列 \(p\) 时,如果要使 \(a_{1, p_1}\) 不为 \(0\),那么 \(p_1 = 1\);如果要使 \(a_{2, p_2}\) 也不为 \(0\),因为 \(1\) 已经被使用,因此 \(p_2 = 2\);以此类推,可以发现如果要使 \(\prod_{i = 1}^n a_{i, p_i} \ne 0\),那么一定有 \(p_i = i\)。也就是说,只有这一种排列对应的乘积是不为 \(0\) 的,因此行列式的值就是这种排列对应的乘积,即对角线元素的乘积。

高斯消元

用定义求行列式的值需要枚举全排列,复杂度过高,因此考虑使用高斯消元将矩阵消成上三角矩阵来求。

代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
int det(vector<int> num[]) {
    int ans = 1;
    for (int i = 1; i <= n; i++) {
        int pos = i;
        while (!num[pos][i] && pos <= n)
            ++pos;
        if (pos > n)
            return 0;
        if (pos != i)
            swap(num[pos], num[i]), ans = dec(0, ans);
        for (int j = i + 1; j <= n; j++) {
            int tmp = mul(num[j][i], inv(num[i][i]));
            for (int l = i; l <= n; l++)
                num[j][l] = dec(num[j][l], mul(tmp, num[i][l]));
        }
        ans = mul(ans, num[i][i]);
    }
    return ans;
}

如果模数不是质数,那么模意义下的逆元不一定存在,我们需要使用辗转相除法代替求逆元:

代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
int det(vector<int> num[]) {
    int ans = 1;
    for (int i = 1; i <= n; ++i) {
        for (int j = i + 1; j <= n; ++j)
            while (num[j][i]) {
                int tmp = num[i][i] / num[j][i];
                if (tmp)
                    for (int k = i; k <= n; ++k)
                        num[i][k] = dec(num[i][k], mul(tmp, num[j][k]));
                swap(num[i], num[j]), ans = dec(0, ans);
            }
        ans = mul(ans, num[i][i]);
        if (!ans)
            return 0;
    }
    return ans;
}

因为辗转相除的复杂度是 \(\log m\),其中 \(m\) 为模数(即数的值域)。乍一看这个东西的时间复杂度是 \(O(n^3\log m)\),但实际上它的复杂度为 \(O(n^2\log m + n^3)\)

时间复杂度证明

先考虑这样一个问题:

奇妙的问题

给定 \(n\) 个数,求它们的 \(\gcd\)

考虑一个朴素的辗转相除法:

1
2
3
ans = num[1];
for (int i = 2; i <= n; ++i)
    ans = gcd(ans, num[i]);

若所有数都小于等于 \(m\),那么这个算法的时间复杂度是 \(O(n \log m)\) 吗?当然不是,应该是 \(O(n + \log m)\)

假设当前求出前 \(k\) 个数的 \(\gcd\)\(d\),在求 \(\gcd(d, a_{k + 1})\) 时,只需常数次除法就能将 \(a_{k + 1}\) 除成一个小于 \(d\) 的数,这样,我们就继续了之前的辗转相除。因此,除了每个数进行的常数次除法之外,剩下的除法次数就是 \(O(\log m)\),也就是说,整个过程的时间复杂度就是 \(O(n + \log m)\)

回到高斯消元这里,第 \(4 \sim 11\) 行代码是辗转相除的部分,根据上面的结论,这一层 while 循环的总数也就是 \(O(n + \log m)\),因为第 \(3, 8\) 行各有一个循环 \(n\) 次的 for 循环,因此总时间复杂度为 \(O(n^2 \log m + n^3)\)

行列式与体积

如果我们将行列式的每一行看作一个向量,那么 \(n\) 个向量 \(v_1, v_2, \cdots, v_n\) 所围成的一个 \(n\) 维立方体(一个有 \(2^n\) 个顶点的立方体,其中每个顶点都是若干个向量加和的端点)即为矩阵行列式的绝对值。

关于体积的求法,我们任选一个向量 \(v'_1\),然后进行 \(n - 1\) 次操作,第 \(k\) 次操作选出一个向量 \(v'_{k + 1}\),作它与前 \(k\) 个向量构成的 \(k\) 维空间的法向量,这样其实就是做了高,然后再用 \(k\) 维立方体的体积乘这个法向量的模长。

对于体积,我们有如下性质:

性质 2

若一个向量的每一维坐标都是 \(0\),那么体积也为 \(0\)

证明

这个向量无论对哪个空间作法向量,模长都是 \(0\),因此体积为 \(0\)


性质 3

若一个向量的每一维坐标变为原来的 \(k\) 倍,则体积变为原来的 \(k\) 倍。

证明

如果把这个向量作为 \(v_1\),那么这个一维立方体的体积变为原来的 \(k\) 倍,因此体积变为原来 \(k\) 倍。


性质 5

交换两个向量的顺序,体积不变。

证明

交换两个向量的顺序后,我们仍然可以按照原来选择的顺序求体积,因此体积不变。


性质 6

若一个向量是另一个向量的若干倍,体积为 \(0\)

证明

我们选择这两个向量作为 \(v'_1, v'_2\),可以发现这两个向量共线,它们所构成二维立方体的体积(也就是平行四边形的面积)为 \(0\),因此体积为 \(0\)


性质 7

将一个向量加上另一个向量的若干倍,体积不变。

证明

我们选择这两个向量作为 \(v'_1, v'_2\),我们发现,若将 \(v'_1\) 加上 \(kv'_2\),这两个向量构成的平行四边形只是被拉伸了,高(即 \(v'_2\)\(v'_1 + kv'_2\) 做的垂线的模长)不变,因此加之前和之后这个平行四边形面积不变。因此体积不变。


性质 8

对角矩阵对应的立方体体积为对角线上元素乘积的绝对值(也就是这个矩阵的行列式的绝对值)。

证明

可以看出这些向量两两垂直,因此体积就是所有向量模长的乘积,也就是矩阵对角线上元素乘积的绝对值。


可以看出,我们将一些体积的性质与行列式的性质对应起来了,我们可以利用性质 7 对这个立方体进行消元,这样能够得到一个两两垂直的向量组,再利用性质 8 即可算出立方体的体积。这个过程对应在矩阵中即为高斯消元,因此我们可以说体积就是矩阵行列式的绝对值了。

有了这个结论,我们可以在体积上推导出性质 1 和 4:

性质 1

若将向量组 \(v\) 中每一个向量的同一维坐标按向量的顺序排成一个新的向量组 \(v'\),则这两个向量组对应立方体的体积相等。

性质 4

若将向量 \(v_m\) 加上一个向量 \(w\),记向量组 \(v_1, \cdots, v_m + w, \cdots, v_n\) 对应的体积为 \(V_1\)\(v_1, \cdots, w, \cdots, v_n\) 对应的体积为 \(V_2\)\(v_1, \cdots, w, \cdots, v_n\) 对应的体积为 \(V_3\)。那么 \(V_1 = V_2 + V_3\)\(V_1 = |V_2 - V_3|\)