背景:
好多东西没学。
勇士被快船惊天大逆转!!!
快船
N
B
NB
NB。
紧接着下午打球水杯被搞烂了
.
.
.
...
...
正题:
P a r t 1 Part1 Part1行列式:
对于一个
n
∗
n
n*n
n∗n的矩阵
A
A
A。
设
p
p
p枚举列的全排列,
τ
(
p
)
τ(p)
τ(p)表示排列
p
p
p的逆序对的个数。
则其行列式为
d
e
t
A
=
∑
p
(
−
1
)
τ
(
p
)
∏
i
=
1
n
a
i
,
p
i
det_A=\sum_p(-1)^{τ(p)}\prod_{i=1}^na_{i,p_i}
detA=∑p(−1)τ(p)∏i=1nai,pi
那么这个东西有什么性质呢?
[
1
]
[1]
[1]:
交换行和列,则行列式结果的符号取反。
这很显然,因为逆序对的奇偶性刚刚好相反。
[
2
]
[2]
[2]:
两行或两列一样时,行列式结果为
0
0
0。
这很显然,因为
p
p
p全部枚举过了,且一定枚举到相同的序列,而
i
i
i又会枚举相等,所以成立。
[
3
]
[3]
[3]:
某一行或某一列乘上了
k
k
k,最后的结果也会乘
k
k
k。
这很显然,你考虑每一行或每一列的贡献,一个
∏
\prod
∏有且仅会被枚举
1
1
1次乘
k
k
k的数,每一次乘
k
k
k,因此你将这个
k
k
k提取出
∑
\sum
∑外面即可,那就是刚刚好乘
k
k
k。
[
4
]
[4]
[4]:
某一行是另一行的
k
k
k倍或某一列是另一列的
k
k
k倍,最后的结果为
0
0
0。
其实就是
[
2
]
,
[
3
]
[2],[3]
[2],[3]的结合体。你先提取出一个
k
k
k,那么就会存在某两行或某两列相等,那么结果就为
0
0
0了。
[
5
]
[5]
[5]:
某一行加上另一行的
k
k
k倍或某一行列加上另一列的
k
k
k倍,最后结果的不变。当某一行加上另一行的k倍时,行列式不变。
证明:可以从求和式子的每一项的那一行的那个元素下手,
把
d
e
t
det
det求和式拆成两个
d
e
t
det
det求和式(就是把被加上
k
k
k倍的哪一行/列拆为原来的和新加的):
d
e
t
1
det_1
det1与原矩阵的行列式求法相同;
d
e
t
2
det_2
det2所代表的矩阵中有两行成比例,比例系数为
k
k
k,值为
0
0
0 (性质
[
4
]
[4]
[4])。
所以相比原来的行列式,值不变。
至此,行列式就结束了。
P a r t 2 Part2 Part2基尔霍夫矩阵&矩阵树定理:
不知道是不是基尔霍夫电流顶定律的那个人发明的?
这里的基尔霍夫矩阵可以用来求无向图生成树的个数。
对于一个无向图
G
G
G,它的生成树个数等于其基尔霍夫矩阵任何一个
N
−
1
N-1
N−1阶主子式的行列式的绝对值。
所谓的
N
−
1
N-1
N−1阶主子式就是对于一个任意的一个
r
r
r,将矩阵的第
r
r
r行和第
r
r
r列同时删去得到的新矩阵。
基尔霍夫矩阵的一种求法(矩阵树定理):
基
尔
霍
夫
矩
阵
K
=
度
数
矩
阵
D
−
邻
接
矩
阵
A
基尔霍夫矩阵K=度数矩阵D-邻接矩阵A
基尔霍夫矩阵K=度数矩阵D−邻接矩阵A。
解释一下:
度数矩阵
(
i
,
i
)
(i,i)
(i,i)表示
i
i
i这点的度,其余点均为0。
邻接矩阵
(
i
,
j
)
(i,j)
(i,j)表示
(
i
,
j
)
(i,j)
(i,j)连的边数;特别的,若
i
=
j
i=j
i=j,则为
0
0
0。
P a r t 3 Part3 Part3快速求行列式:
首先对于这样一个矩阵:
注意到是一个上三角矩阵(左下的值为
0
0
0,而右上有值)。
其行列式的值为对角线的乘积(同理下三角矩阵)。
因为只有
p
p
p的排列为
1234
1234
1234 时,
∏
\prod{}
∏后才没有
0
0
0出现,才对结果有贡献。
又因为性质
[
5
]
[5]
[5],所以采用高斯消元的方法,把矩阵消为一个上三角矩阵后,然后求出对角线的积,便是该矩阵的行列式的值。
复杂度
Θ
(
n
3
)
\Theta(n^3)
Θ(n3)。
P a r t 4 Part4 Part4应用:
我们可以用上述方法求解基尔霍夫矩阵,就能解决一些问题:
[
1
]
[1]
[1]:
求无向图生成树的个数。
[
2
]
[2]
[2]:
内向树:树上的边是由儿子指向父亲;
外向树:树上的边是由父亲指向儿子。
若求内向生成树的个数,则
D
i
,
i
D_{i,i}
Di,i表示入度即可;
若求外向生成树的个数,则
D
i
,
i
D_{i,i}
Di,i表示出度即可。