本章节将简要介绍抽象代数的相关知识.现阶段算法竞赛的主要内容并不直接考察抽象代数的知识,但是在算法的描述或是问题的题解中常常会牵涉一些抽象函数的基本概念,这使得掌握了基础抽象代数概念的读者能够更快速理解一些算法.因此,这部分内容并不是任何选手的必修知识,而仅供那些感兴趣或者可能从中受益的读者参考使用.同时,本章节将避免过全过深的介绍抽象代数的知识1 ,而会集中在基础概念以及与 OI 其他部分知识联系最为紧密的部分.想系统学习抽象代数知识的读者,应当参考专业的抽象代数教科书学习.
为了更好帮助读者理解阅读本部分内容可能的收获,列举一些算法竞赛中可能牵涉到抽象代数知识的例子:
数论和多项式的很多定理是抽象代数中结论的特例;
数据结构中,线段树 等结构可以维护幺半群的信息,而很多 DP 问题的递推关系可以抽象成这样的幺半群结构;
组合数学中,Pólya 计数原理 的严格表述和证明需要用到群论的相关概念.
基于此,本章节将着重介绍无法跳过的基础知识和与这些应用直接相关的部分.作为开始,本文介绍群、环、域的基本概念.
群
群的定义如下.
群
设 G G G 是非空集合,其上有二元运算 ⋅ : G × G → G \cdot:G\times G\rightarrow G ⋅ : G × G → G ,如果它们满足以下性质,则称 ( G , ⋅ ) (G,\cdot) ( G , ⋅ ) 是一个 群 (group):
结合律(associative property):对于所有 a , b , c ∈ G a,b,c\in G a , b , c ∈ G ,成立 a ⋅ ( b ⋅ c ) = ( a ⋅ b ) ⋅ c a\cdot(b\cdot c)=(a\cdot b)\cdot c a ⋅ ( b ⋅ c ) = ( a ⋅ b ) ⋅ c ;
有单位元:存在 e ∈ G e\in G e ∈ G ,使得对于任意 a ∈ G a\in G a ∈ G ,都成立 a ⋅ e = e ⋅ a = a a\cdot e = e\cdot a = a a ⋅ e = e ⋅ a = a .这里,e e e 称为 G G G 的 单位元 (identity element),也称幺元;
存在逆元:对于所有 a ∈ G a\in G a ∈ G ,都存在相应的 b ∈ G b\in G b ∈ G 使得 a ⋅ b = b ⋅ a = e a\cdot b=b\cdot a=e a ⋅ b = b ⋅ a = e .这里,b b b 称为 a a a 的 逆元 (inverse element).
关于定义中的封闭性条件
这里的二元运算就隐含了所谓的封闭性条件,即对于任何 a , b ∈ G a,b\in G a , b ∈ G ,都有 a ⋅ b ∈ G a\cdot b\in G a ⋅ b ∈ G .有些文章会将其单独列出.
群的基本性质
对于群 ( G , ⋅ ) (G,\cdot) ( G , ⋅ ) ,以下性质总是成立:
对于任何有限长的列 { g i } i = 1 k ⊆ G \{g_i\}_{i=1}^k\subseteq G { g i } i = 1 k ⊆ G ,乘积 g 1 ⋅ g 2 ⋅ ⋯ ⋅ g k g_1\cdot g_2\cdot\cdots\cdot g_k g 1 ⋅ g 2 ⋅ ⋯ ⋅ g k 的运算结果与加括号的方式无关;
单位元 e e e 总是唯一的;
对于任何元素 a ∈ G a\in G a ∈ G ,它的逆 a − 1 a^{-1} a − 1 也是唯一的;
消去律(cancellation law):对于 a , b , c ∈ G a,b,c\in G a , b , c ∈ G ,如果 a ⋅ c = b ⋅ c a\cdot c=b\cdot c a ⋅ c = b ⋅ c 或 c ⋅ a = c ⋅ b c\cdot a=c\cdot b c ⋅ a = c ⋅ b ,那么有 a = b a=b a = b .
群相当常见.通俗地说,所有不损失结构的变换都自动构成群.以常见的几种类型的群为例.
群的例子
对称群 (symmetric group):集合 M M M 上的所有 置换 ,即自 M M M 到 M M M 自身的双射,就在映射的复合下构成群 S M S_M S M .单位元是恒等变换,逆元是逆映射(双射必然存在逆映射).如果集合 M M M 有限,大小为 n n n ,也常记作 S n S_n S n ,称作 n n n 次对称群.
空间对称群(symmetry group):对于一个几何图形,能够使其与自身重合的变换全体也在映射的复合下构成群.这描述了该几何图形的空间对称性.具体例子可以参考 常见空间对称群 .
整数的加法群:整数集 Z \mathbf Z Z 在加法 + + + 运算下构成群 ( Z , + ) (\mathbf Z,+) ( Z , + ) .单位元是 0 0 0 ,逆元是相反数.
整数模 n n n 乘法群(multiplicative group of integers modulo n n n ):对于一个模数 n n n ,所有与 n n n 互质的整数对应的 同余类 ,在乘法运算下构成群 ( ( Z / n Z ) × , × ) ((\mathbf Z/n\mathbf Z)^\times,\times) (( Z / n Z ) × , × ) .单位元是 1 ˉ \bar 1 1 ˉ ,逆元就是模 n n n 的 乘法逆元 (对应的同余类),其存在性由 裴蜀定理 保证.具体结构分析参考 整数模 n n n 乘法群 .
一般线性群(general linear group):数域 F F F 上的 n n n 维的全体可逆方阵在乘法运算下构成群 G L n ( F ) GL_n(F) G L n ( F ) .单位元是单位矩阵,逆元是逆矩阵.
要更好地理解群的定义,不妨对比着看几个不属于群的例子.
不是群的例子
所有 M M M 到自身的映射(不一定是双射),并不构成群.因为那些不是双射的映射不存在逆元.
整数在乘法下并不构成群,因为 2 2 2 在整数范围内没有乘法逆元.
正整数在加法下也不构成群,因为正整数没有加法单位元.
模 n n n 的所有非零同余类在乘法意义下往往不构成群.比如说 ( Z / 6 Z ) ∖ { 0 ‾ } (\mathbf Z/6\mathbf Z)\setminus\{\overline 0\} ( Z /6 Z ) ∖ { 0 } 中,2 ‾ × 3 ‾ = 0 ‾ \overline 2\times\overline 3=\overline 0 2 × 3 = 0 不属于这个集合,这意味着乘法都不是这个集合上良定义的二元运算(或者说,它不满足封闭性).
有时,也需要讨论这些更不完善的结构的性质.因此,可以定义如下概念,它们比群更宽泛.
半群
对于非空集合 G G G 和其上的二元运算 ⋅ \cdot ⋅ ,如果该运算满足结合律,则称 ( G , ⋅ ) (G,\cdot) ( G , ⋅ ) 是一个 半群 (semigroup).
幺半群
对于半群 ( G , ⋅ ) (G,\cdot) ( G , ⋅ ) ,如果它还存在单位元,则称 ( G , ⋅ ) (G,\cdot) ( G , ⋅ ) 是一个 幺半群 (monoid).
幺半群和半群的例子
上面的例子中,( N + , + ) (\mathbf N_+,+) ( N + , + ) 是半群,而 ( Z , × ) (\mathbf Z,\times) ( Z , × ) 是幺半群.
最后,很多熟悉的群上的运算除了满足结合律外,还满足交换律.这类群的结构相对简单,它们称作 Abel 群,也称作交换群.
Abel 群
对于群 ( G , ⋅ ) (G,\cdot) ( G , ⋅ ) ,如果运算 ⋅ \cdot ⋅ 还满足交换律(commutative property),即对于所有 a , b ∈ G a,b\in G a , b ∈ G ,都成立 a ⋅ b = b ⋅ a a\cdot b=b\cdot a a ⋅ b = b ⋅ a ,则称 ( G , ⋅ ) (G,\cdot) ( G , ⋅ ) 是一个 Abel 群 (Abelian group)或 交换群 (communicate group).
Abel 群和非 Abel 群的例子
整数加法群 ( Z , + ) (\mathbf Z,+) ( Z , + ) 就是一个 Abel 群.
当 n ≥ 3 n\ge3 n ≥ 3 时,对称群 S n S_n S n 并不是 Abel 群.
这些就是群论相关的基本定义.群论的更多内容,可以参考 群论 或相关书籍.
环
环的定义如下.
环
对于非空集合 R R R 和其上的两个二元运算 + : R × R → R +:R\times R\rightarrow R + : R × R → R 和 ⋅ : R × R → R \cdot:R\times R\rightarrow R ⋅ : R × R → R ,如果它们满足以下性质,则称 ( R , + , ⋅ ) (R,+,\cdot) ( R , + , ⋅ ) 是一个 环 (ring):
( R , + ) (R,+) ( R , + ) 构成 Abel 群,其单位元记作 0 0 0 ,元素 a ∈ R a\in R a ∈ R 在 + + + 下的逆元记作 − a -a − a .
( R , ⋅ ) (R,\cdot) ( R , ⋅ ) 构成半群,即 ⋅ \cdot ⋅ 满足结合律.
分配律(distributive property):对于所有 a , b , c ∈ R a,b,c\in R a , b , c ∈ R ,成立 a ⋅ ( b + c ) = a ⋅ b + a ⋅ c a\cdot(b+c)=a\cdot b+a\cdot c a ⋅ ( b + c ) = a ⋅ b + a ⋅ c 和 ( a + b ) ⋅ c = a ⋅ c + b ⋅ c (a+b)\cdot c=a\cdot c+b\cdot c ( a + b ) ⋅ c = a ⋅ c + b ⋅ c .
为表述方便,这两个二元运算 + + + 和 ⋅ \cdot ⋅ 常称作该环的加法和乘法,相应地,加法单位元称作 零元 (zero),乘法单位元(如果存在)称作 幺元 (identity).应避免和具体的数集中的加法、乘法,以及自然数零和一产生混淆.
关于定义中是否要求乘法单位元
在有的定义中,环必须存在乘法单位元;相对地,不存在乘法单位元的则被称为 伪环 (rng 或 pseudo-ring).遇到的时候需根据上下文加以判断.维基百科采用的就是这种定义2 .
环的加法结构相当简单,但是乘法结构十分原始.因而如果类比群,在乘法上做更多要求,可以得到如下相关定义.
幺环
对于环 ( R , + , ⋅ ) (R,+,\cdot) ( R , + , ⋅ ) ,如果它含幺,即存在乘法单位元,记作 1 1 1 ,则称 ( R , + , ⋅ ) (R,+,\cdot) ( R , + , ⋅ ) 是一个 幺环 (ring with identity).
除环
对于非零幺环 ( R , + , ⋅ ) (R,+,\cdot) ( R , + , ⋅ ) ,如果对于所有非 0 0 0 元素 a ∈ R a\in R a ∈ R ,都存在乘法逆元(记作 a − 1 a^{-1} a − 1 ),则称 ( R , + , ⋅ ) (R,+,\cdot) ( R , + , ⋅ ) 是一个 除环 (division ring).
交换环
对于环 ( R , + , ⋅ ) (R,+,\cdot) ( R , + , ⋅ ) ,如果它的乘法满足交换律,则称 ( R , + , ⋅ ) (R,+,\cdot) ( R , + , ⋅ ) 是一个 交换环 (commutative ring).
这里除环的定义中有趣的一点是,它将 0 0 0 视为乘法结构中的特殊元素.这是因为 0 = 0 ⋅ a = a ⋅ 0 0 = 0\cdot a = a\cdot 0 0 = 0 ⋅ a = a ⋅ 0 3 .也就是说,环中加法单位元乘以任何元素都得到其自身.这样,它自然不会存在乘法逆元,除非它本身就是乘法单位元.这样的环只有零环(见下面的例子).
这里的启示是,理解一般的环的乘法结构时,要去除加法单位元的影响,考察 R ∖ { 0 } R\setminus\{0\} R ∖ { 0 } .基于这一想法,有如下定义.
零因子
对于环 ( R , + , ⋅ ) (R,+,\cdot) ( R , + , ⋅ ) ,如果存在 b ∈ R b\in R b ∈ R 且 b ≠ 0 b\ne 0 b = 0 ,成立 a ⋅ b = 0 a\cdot b=0 a ⋅ b = 0 或 b ⋅ a = 0 b\cdot a=0 b ⋅ a = 0 ,则称非零元素 a a a 为一个 零因子 (zero divisor).
可逆元(单位)
对于环 ( R , + , ⋅ ) (R,+,\cdot) ( R , + , ⋅ ) ,如果元素 a a a 有乘法逆元,即存在 b ∈ R b\in R b ∈ R ,成立 a ⋅ b = b ⋅ a = 1 a\cdot b=b\cdot a=1 a ⋅ b = b ⋅ a = 1 ,则称元素 a ∈ R a\in R a ∈ R 是一个 可逆元 ,或称 单位 (unit).
「单位」与「单位元」
请不要混淆这两个概念.为避免混淆,抽象代数部分将使用「可逆元」的名称代替「单位」.
零因子不可能是可逆元,可逆元不可能是零因子.但是,一个非零元素可以既不是零因子,也不是可逆元.
如果一个环没有零因子,就说明所有非零元素的集合在乘法运算下封闭,即 ( R ∖ { 0 } , ⋅ ) (R\setminus\{0\},\cdot) ( R ∖ { 0 } , ⋅ ) 构成半群.进一步地,如果还要求它成为交换幺半群,就可以得到整环的定义.
整环
对于非零环 ( R , + , ⋅ ) (R,+,\cdot) ( R , + , ⋅ ) ,如果它是交换环,有乘法单位元,且无零因子,则称它为整环(integral domain).
虽然整环中的元素不一定存在逆元,但是没有零因子这一特性已经足够在整环上建立消去律.
整环的消去律
设整环 R R R 有元素 a , b , c ∈ R a,b,c\in R a , b , c ∈ R 且 a ≠ 0 a\neq 0 a = 0 ,如果 a b = a c ab=ac ab = a c ,则必然有 b = c b=c b = c .
对于一般的幺环,如果只考虑它的全体可逆元,那么同样可以得到群结构.这称为环的乘法群或是单位群.
乘法群(单位群)
对于幺环 ( R , + , ⋅ ) (R,+,\cdot) ( R , + , ⋅ ) ,设 R × R^\times R × 为 R R R 中全体可逆元的集合,则 ( R × , ⋅ ) (R^\times,\cdot) ( R × , ⋅ ) 构成群,称为幺环 R R R 的 乘法群 (multiplicative group),或是 单位群 (unit group).
最简单的一些环的例子如下.
环的例子
零环(zero ring):集合 { 0 } \{0\} { 0 } 在通常意义的加法 + + + 和乘法 × \times × 下构成环,称为零环.它是唯一的只有一个元素的环,也是唯一的加法单位元和乘法单位元相等的环.
整数环:整数集 Z \mathbf Z Z 和其上通常定义的加法 + + + 和乘法 × \times × 构成了环 ( Z , + , × ) (\mathbf Z,+,\times) ( Z , + , × ) .实际上,这是一个整环,但是它不是除环.
多项式环:对于一个环 R R R ,可以在上面定义 多项式环 R [ x ] R[x] R [ x ] .如果 R R R 是整环,则该多项式环必然是整环.
四元数(quaternion):类比复数,可以考虑集合 H = { a + b i + c j + d k : a , b , c , d ∈ R } \mathbf H=\{a+b\mathrm{i}+c\mathrm{j}+d\mathrm{k}:a,b,c,d\in\mathbf R\} H = { a + b i + c j + d k : a , b , c , d ∈ R } ,并且定义其上的加法和乘法,这里,i , j , k \mathrm{i},\mathrm{j},\mathrm{k} i , j , k 的乘法运算满足
i 2 = j 2 = k 2 = − 1 , i j = − j i = k , j k = − k j = i , k i = − i k = j . \mathrm{i}^2=\mathrm{j}^2=\mathrm{k}^2=-1,\ \mathrm{i}\mathrm{j}=-\mathrm{j}\mathrm{i}=\mathrm{k},\ \mathrm{j}\mathrm{k}=-\mathrm{k}\mathrm{j}=\mathrm{i},\ \mathrm{k}\mathrm{i}=-\mathrm{i}\mathrm{k}=\mathrm{j}. i 2 = j 2 = k 2 = − 1 , ij = − ji = k , jk = − kj = i , ki = − ik = j .
那么可以验证,H \mathbf H H 构成环,而且,它是一个非交换的除环.
整数集的子集 2 Z 2\mathbf Z 2 Z ,在通常意义的加法和乘法下构成环,它是交换环,没有零因子,但是并不含幺.
整数模 n n n 同余类 Z / n Z \mathbf Z/n\mathbf Z Z / n Z 在同余类的加法和乘法运算下构成环,它是交换环,含幺(即 1 ˉ \bar 1 1 ˉ ).这样的环含有零因子,当且仅当 n n n 是合数.所以,当 n n n 是素数时,环 ( Z / n Z , + , × ) (\mathbf Z/n\mathbf Z, +,\times) ( Z / n Z , + , × ) 是整环;而且,此时它也是除环,所以它实际构成为了一个域.它的乘法群 ( ( Z / n Z ) × , × ) ((\mathbf Z/n\mathbf Z)^\times,\times) (( Z / n Z ) × , × ) 就是整数模 n n n 乘法群.
矩阵环:环 R R R 上的全体 n n n 维方阵在矩阵的加法和乘法下构成一个环 M n ( R ) M_n(R) M n ( R ) .一般地,这个环有零因子,且不是交换环.
对于一个集合 A A A 的全体子集 P ( A ) \mathcal P(A) P ( A ) ,如果定义集合的对称差 △ \triangle △ 和交 ∩ \cap ∩ 分别为其加法和乘法运算,则 ( P ( A ) , △ , ∩ ) (\mathcal P(A),\triangle,\cap) ( P ( A ) , △ , ∩ ) 构成环.一般地,这个环含幺,有零因子,且是交换环.
当然,对于环的结构的讨论远不止这些,要了解更多内容,可以参考 环论 或相关书籍.
域
域是一个比环性质更强的代数结构.具体地,域是交换除环.当然也可以写出它完整的定义.
域
对于非空集合 F F F 和其上的两个二元运算 + : F × F → F +:F\times F\rightarrow F + : F × F → F 和 ⋅ : F × F → F \cdot:F\times F\rightarrow F ⋅ : F × F → F ,如果它们满足以下性质,则称 ( F , + , ⋅ ) (F,+,\cdot) ( F , + , ⋅ ) 是一个 域 (field):
( F , + ) (F,+) ( F , + ) 构成 Abel 群,其单位元记作 0 0 0 ,元素 a ∈ F a\in F a ∈ F 在 + + + 下的逆元记作 − a -a − a .
( F ∖ { 0 } , ⋅ ) (F\setminus\{0\},\cdot) ( F ∖ { 0 } , ⋅ ) 构成 Abel 群,其单位元记作 1 1 1 ,元素 a ∈ F ∖ { 0 } a\in F\setminus\{0\} a ∈ F ∖ { 0 } 在 ⋅ \cdot ⋅ 下的逆元记作 a − 1 a^{-1} a − 1 .
换句话说,域是对加、减、乘、除四则运算都封闭的代数结构.
常见的域的例子如下.
域的例子
数域:有理数集 Q \mathbf Q Q ,实数集 R \mathbf R R 和复数集 C \mathbf C C 在通常意义的加法和乘法下都构成域.
有限域(finite field):以质数 p p p 为模的整数同余类的集合 Z / p Z \mathbf Z/p\mathbf Z Z / p Z 在同余类的加法和乘法下构成域.当然,除此之外还有其他的有限域,它们的结构由其大小唯一确定,且大小必然是质数幂的形式.
分式域 (fraction field):设 ( R , + , ⋅ ) (R,+,\cdot) ( R , + , ⋅ ) 为整环,可以考虑形如 a b − 1 ab^{-1} a b − 1 的元素构成的集合 Q Q Q .严格地说,在集合 R × ( R ∖ { 0 } ) R\times(R\setminus\{0\}) R × ( R ∖ { 0 }) 上定义等价关系:( a 1 , b 1 ) ∼ ( a 2 , b 2 ) (a_1,b_1)\sim(a_2,b_2) ( a 1 , b 1 ) ∼ ( a 2 , b 2 ) 当且仅当 a 1 b 2 = a 2 b 1 a_1b_2=a_2b_1 a 1 b 2 = a 2 b 1 .那么,集合 Q Q Q 就是这一关系下的等价类构成的集合 R × ( R ∖ { 0 } ) / ∼ R\times(R\setminus\{0\})/\sim R × ( R ∖ { 0 }) / ∼ ,其中,( a , b ) (a,b) ( a , b ) 所在等价类就记作 a b − 1 ab^{-1} a b − 1 .如果定义它上面的运算为
a 1 b 1 − 1 + a 2 b 2 − 1 = ( a 1 ⋅ b 2 + a 2 ⋅ b 1 ) ( b 1 ⋅ b 2 ) − 1 , ( a 1 b 1 − 1 ) ⋅ ( a 2 b 2 − 1 ) = ( a 1 ⋅ a 2 ) ( b 1 ⋅ b 2 ) − 1 \begin{aligned}
a_1b_1^{-1}+a_2b_2^{-1} &= (a_1\cdot b_2+a_2\cdot b_1)(b_1\cdot b_2)^{-1},\\
(a_1b_1^{-1})\cdot(a_2b_2^{-1}) &= (a_1\cdot a_2)(b_1\cdot b_2)^{-1}
\end{aligned} a 1 b 1 − 1 + a 2 b 2 − 1 ( a 1 b 1 − 1 ) ⋅ ( a 2 b 2 − 1 ) = ( a 1 ⋅ b 2 + a 2 ⋅ b 1 ) ( b 1 ⋅ b 2 ) − 1 , = ( a 1 ⋅ a 2 ) ( b 1 ⋅ b 2 ) − 1
则 ( Q , + , ⋅ ) (Q,+,\cdot) ( Q , + , ⋅ ) 构成域,称为 R R R 的分式域.例如,有理数域 ( Q , + , × ) (\mathbf Q,+,\times) ( Q , + , × ) 就是整数环 ( Z , + , × ) (\mathbf Z,+,\times) ( Z , + , × ) 的分式域.
二次域(quadratic field):它是在有理数域 Q \mathbf Q Q 中添加了 d \sqrt d d 而扩张成的,这里 d ≠ 0 , 1 d\neq 0,1 d = 0 , 1 且没有平方因子.相关内容可以参考 二次域 .
域相较于环,拥有着非常简单的加法和乘法结构.所以,域本身的结构往往很简单.这使得域的研究和环的研究大不相同,通常会转而研究域的扩张,以及相应的 Galois 理论.在算法竞赛中,有时会需要在有理数域或者有限域的扩域上进行计算.域论的相关内容,可以参考 域论 或相关书籍.
应用
最后,以下面的题目为例,说明抽象的代数对象是怎样辅助分析具体的问题的.
???+ note "【模板】"动态 DP"& 动态树分治(加强版) "
给定大小为 n n n 的带点权的树,进行 m m m 次点权修改.每次修改后要输出树上最大带权独立集的权值之和.问题强制在线.
思路分析
这道题是动态 DP 模板,一种复杂度正确的代码实现需要用到 全局平衡二叉树 ,具体样例代码也在对应页面.这里仅仅结合该题情景,分析建模的过程.
为了突出重点,这里暂不考虑全局平衡二叉树对于树形结构的处理,转而考虑链上的最大带权独立集的 DP 问题.顺次考虑链 [ 1 , n ] [1,n] [ 1 , n ] 上的每个点,对于点 i i i 可以选(1 1 1 )或不选(0 0 0 ).分别设这两种情形下,[ 1 , i ] [1,i] [ 1 , i ] 上子问题的最优解为 f i , 1 f_{i,1} f i , 1 和 f i , 0 f_{i,0} f i , 0 .所以,可以写出 DP 方程为
f i , 1 = w i + f i − 1 , 0 , f i , 0 = max { f i − 1 , 1 , f i − 1 , 0 } . \begin{aligned}
f_{i,1}&=w_{i}+f_{i-1,0},\\
f_{i,0}&=\max\{f_{i-1,1},f_{i-1,0}\}.
\end{aligned} f i , 1 f i , 0 = w i + f i − 1 , 0 , = max { f i − 1 , 1 , f i − 1 , 0 } .
它的初值为 ( f 0 , 1 , f 0 , 0 ) = ( 0 , 0 ) (f_{0,1},f_{0,0})=(0,0) ( f 0 , 1 , f 0 , 0 ) = ( 0 , 0 ) ,而最终答案就是 max { f n , 1 , f n , 0 } \max\{f_{n,1},f_{n,0}\} max { f n , 1 , f n , 0 } .要表示点 i i i 对于最终结果的影响,只需要注意到这一递归关系可以写作
( f i , 1 , f i , 0 ) = g ( f i − 1 , 1 , f i − 1 , 0 ; w i ) . (f_{i,1},f_{i,0})=g(f_{i-1,1},f_{i-1,0};w_i). ( f i , 1 , f i , 0 ) = g ( f i − 1 , 1 , f i − 1 , 0 ; w i ) .
这是一连串 R 2 \mathbf R^2 R 2 到 R 2 \mathbf R^2 R 2 的映射,它将 ( f i − 1 , 1 , f i − 1 , 0 ) (f_{i-1,1},f_{i-1,0}) ( f i − 1 , 1 , f i − 1 , 0 ) 映射到 ( f i , 1 , f i , 0 ) (f_{i,1},f_{i,0}) ( f i , 1 , f i , 0 ) ,用群的语言描述,这些变换在映射的复合之下构成幺半群.这正是线段树可以维护的.
但是,这样的含参变换 g ( ⋅ ; w i ) g(\cdot;w_i) g ( ⋅ ; w i ) 如果没有特殊的结构,一般的 R 2 \mathbf R^2 R 2 到 R 2 \mathbf R^2 R 2 的映射是不可能用有限维的数据描述的.这里就需要另一项观察,即如果在 R ∪ { − ∞ } \mathbf R\cup\{-\infty\} R ∪ { − ∞ } 上,定义 max \max max 作为加法、+ + + 作为乘法,那么 R ∪ { − ∞ } \mathbf R\cup\{-\infty\} R ∪ { − ∞ } 构成一种类似环的结构,这里,− ∞ -\infty − ∞ 是加法单位元,0 0 0 是乘法单位元.但是它不是环,因为其中的元素并非都有加法逆元.这样的结构叫做半环4 ,这里 ( R ∪ { − ∞ } , max , + ) (\mathbf R\cup\{-\infty\},\max,+) ( R ∪ { − ∞ } , max , + ) 形成的半环叫做 热带半环 (tropical semiring).
基于热带半环 ( R , ⊕ , ⊗ ) (R,\oplus,\otimes) ( R , ⊕ , ⊗ ) ,可以定义它上面的矩阵乘法.即对于 m × n m\times n m × n 维矩阵 A = ( a i j ) A=(a_{ij}) A = ( a ij ) 和 n × p n\times p n × p 维矩阵 B = ( b j k ) B=(b_{jk}) B = ( b j k ) ,可以定义其乘积 A B AB A B 为 ( c i k ) (c_{ik}) ( c ik ) ,它的每项元素等于
c i k = ⨁ j = 1 n ( b i j ⊗ c j k ) = max 1 ≤ j ≤ n ( b i j + c j k ) . c_{ik} = \bigoplus_{j=1}^n(b_{ij}\otimes c_{jk}) = \max_{1\le j\le n}\;(b_{ij}+c_{jk}). c ik = j = 1 ⨁ n ( b ij ⊗ c j k ) = 1 ≤ j ≤ n max ( b ij + c j k ) .
有了这些记号,可以将上述递推关系看作是热带半环上的线性变换,并用矩阵语言写作
( f i , 1 f i , 0 ) = ( − ∞ w i 0 0 ) ( f i − 1 , 1 f i − 1 , 0 ) . \left(\begin{matrix}f_{i,1}\\f_{i,0}\end{matrix}\right)
=\left(\begin{matrix}-\infty&w_i\\0&0\end{matrix}\right)\left(\begin{matrix}f_{i-1,1}\\f_{i-1,0}\end{matrix}\right). ( f i , 1 f i , 0 ) = ( − ∞ 0 w i 0 ) ( f i − 1 , 1 f i − 1 , 0 ) .
由此,只要用线段树维护这一热带半环上的矩阵的乘积就可以回答多次修改的链上的动态 DP 问题.
现在回到该问题的树上版本.对于树上的节点 i i i ,其子节点集合记作 S ( i ) S(i) S ( i ) ,则该处的 DP 方程为
f i , 1 = w i + ∑ j ∈ S ( i ) f j , 0 , f i , 0 = ∑ j ∈ S ( i ) max { f j , 1 , f j , 0 } . \begin{aligned}
f_{i,1}&=w_i+\sum_{j\in S(i)}f_{j,0},\\
f_{i,0}&=\sum_{j\in S(i)}\max\{f_{j,1},f_{j,0}\}.
\end{aligned} f i , 1 f i , 0 = w i + j ∈ S ( i ) ∑ f j , 0 , = j ∈ S ( i ) ∑ max { f j , 1 , f j , 0 } .
首先,通过树链剖分将问题转化为链上版本.设 h h h 是 i i i 的重子节点,那么上述递推方程可以写作
f i , 1 = w i + f h , 0 + g i , 1 , f i , 0 = max { f j , 0 , f j , 1 } + g i , 0 , \begin{aligned}
f_{i,1}&=w_i+f_{h,0}+g_{i,1},\\
f_{i,0}&=\max\{f_{j,0},f_{j,1}\}+g_{i,0},
\end{aligned} f i , 1 f i , 0 = w i + f h , 0 + g i , 1 , = max { f j , 0 , f j , 1 } + g i , 0 ,
这里,
g i , 1 = ∑ j ∈ S ( i ) , j ≠ h f j , 0 , g i , 0 = ∑ j ∈ S ( i ) , j ≠ h max { f j , 1 , f j , 0 } \begin{aligned}
g_{i,1}&=\sum_{j\in S(i),\ j\neq h}f_{j,0},\\
g_{i,0}&=\sum_{j\in S(i),\ j\neq h}\max\{f_{j,1},f_{j,0}\}
\end{aligned} g i , 1 g i , 0 = j ∈ S ( i ) , j = h ∑ f j , 0 , = j ∈ S ( i ) , j = h ∑ max { f j , 1 , f j , 0 }
总结了轻子节点的贡献.根据上文描述,这些变换都可以写作热带半环上的矩阵形式,所以,整个问题也就可以在树剖后的线段树上维护.但是,直接用树剖加线段树的单次修改是 O ( log 2 n ) O(\log^2n) O ( log 2 n ) 的,所以需要用到上文提到的全局平衡二叉树优化到 O ( log n ) O(\log n) O ( log n ) ,当然也可以用 LCT 维护.
这里提到的热带半环以及上面的矩阵运算其实并不罕见.如果将上文中的 max \max max 换作 min \min min ,则相应的热带半环常用于最短路问题中.如果 n n n 维方阵 A A A 给出了顶点数目为 n n n 的某个图的两点间的(最短)边权,那么,A k A^k A k 的 ( i , j ) (i,j) ( i , j ) 处的元素就是自点 i i i 经至多 k k k 条边到点 j j j 的最短距离;特别地,A n A^n A n 就是该图的距离矩阵.当然实际实现的时候并不会真的暴力计算这一矩阵的幂,而是使用复杂度为 O ( n 3 ) O(n^3) O ( n 3 ) 的 Floyd 算法.
参考资料与注释
Dummitt, D.S. and Foote, R.M. (2004) Abstract Algebra. 3rd Edition, John Wiley & Sons, Inc.
Tropical semiring - Wikipedia