一、积和式的定义
积和式(permanent)是一种和行列式长得很像的矩阵函数。在介绍积和式之前,我们先看看行列式(determinant)的定义。
首先需要引入“排列”(permutation)的概念。对于集合 S = { 1 , 2 , ⋯ , n } S=\{1,2,\cdots,n\} S={ 1,2,⋯,n},它的一个排列 σ \sigma σ就是对 S S S中元素的一个重排。 σ \sigma σ的第 i i i个元素记作 σ i \sigma_i σi。例如,对于 n = 5 n=5 n=5,我们令 σ = { 2 , 5 , 1 , 4 , 3 } \sigma=\{2,5,1,4,3\} σ={ 2,5,1,4,3},则 σ 3 = 1 \sigma_3=1 σ3=1, σ 5 = 3 \sigma_5=3 σ5=3。
排列的逆序对就是 a a a在 b b b前面但 σ a > σ b \sigma_a>\sigma_b σa>σb的情况。例如 σ = { 2 , 1 , 3 , 5 , 4 } \sigma=\{2,1,3,5,4\} σ={ 2,1,3,5,4},有两个逆序对: ( σ 1 , σ 2 ) = ( 2 , 1 ) (\sigma_1,\sigma_2)=(2,1) (σ1,σ2)=(2,1)和 ( σ 4 , σ 5 ) = ( 5 , 4 ) (\sigma_4,\sigma_5)=(5,4) (σ4,σ5)=(5,4)。一个排列 σ \sigma σ中逆序对的个数记作 τ ( σ ) \tau(\sigma) τ(σ)。令 s g n ( σ ) = ( − 1 ) τ ( σ ) \mathrm{sgn}(\sigma)=(-1)^{\tau(\sigma)} sgn(σ)=(−1)τ(σ)。对于一个排列 σ \sigma σ,如果你把其中的两个数互换,则 s g n ( σ ) \mathrm{sgn}(\sigma) sgn(σ)会变号。所有 n n n个元素的排列的集合记作 S n S_n Sn。例如, S 3 = { ( 1 2 3 ) , ( 1 3 2 ) , ( 2 1 3 ) , ( 2 3 1 ) , ( 3 1 2 ) , ( 3 2 1 ) } S_3=\{(1\ 2\ 3),(1\ 3\ 2),(2\ 1\ 3),(2\ 3\ 1),(3\ 1\ 2),(3\ 2\ 1)\} S3={(1 2 3),(1 3 2),(2 1 3),(2 3 1),(3 1 2),(3 2 1)}。
给定一个 n × n n\times n n×n的矩阵 A = ( a i j ) n × n A=(a_{ij})_{n\times n} A=(aij)n×n,它的行列式为 det ( A ) = ∑ σ ∈ S n ( s g n ( σ ) ∏ i = 1 n a i , σ i ) \det(A)=\sum\limits_{\sigma\in S_n}\left(\mathrm{sgn}(\sigma)\prod\limits_{i=1}^{n}a_{i,\sigma_{i}}\right) det(A)=σ∈Sn∑(sgn(σ)i=1∏nai,σi)例如,当 n = 3 n=3 n

积和式是矩阵函数的一种,类似行列式但不含符号变化。Ryser算法利用容斥原理在指数时间复杂度内计算积和式,通过枚举列的组合并修正项来得到结果。文章介绍了积和式的定义,Ryser算法的思路及C++实现,以及算法的时间复杂度。
最低0.47元/天 解锁文章





