前言
请怀着批判性思维阅读,如果有任何问题欢迎前来踩爆我。
群
定义
如果一个集合 S=∅,且在 S 上的运算 ⋅ 满足一下要求,得到我们称 (S,⋅) 为一个群。
- 封闭性:∀a,b∈S,a⋅b∈S。
- 结合律:∀a,b,c∈S,(a⋅b)⋅c=a⋅(b⋅c)。
- 单位元:∃e∈S,∀a∈S,a⋅e=a。
- 逆元:∀a∈S,∃inv∈S,a⋅inv=e。
子群
如果群 G(S,⋅) 满足 H(T,⋅) 也是一个群且 T⊆S,那么我们称 H 是 G 的一个子群,记作 H≤G。
简单性质
单位元唯一
对于一个群 (S,⋅),其单位元 e 是唯一的。
假设群中有两个不同单位元 e1,e2,那么就有 e1=e1⋅e2=e2,与假设矛盾,故只有一个单位元。
逆元不分左右
对于一个群 (S,⋅),如果 a⋅x=e,那么 x⋅a=e。
不妨设 c⋅a=e,那么 x⋅a=(c⋅a)⋅(x⋅a)=c⋅a⋅(a⋅x)=c⋅a=e。
逆元唯一
对于一个群 (S,⋅) 中的任意元素 x,其逆元 inv 是唯一的。
假设存在 x 的两个逆元 inv1,inv2,那么满足 inv1=inv1⋅x⋅inv2=inv2。
置换
定义
一个序列(有序且不可重复的)自身的一种双射被称为置换,对于 S={a1,a2,⋯,an} 的置换可以写作:
f=(a1ap1a2ap2⋯⋯anapn)
表示把第 i 个位置的元素换到第 pi 个位置。
其实实际上置换更改的是下标还是具体的值在这篇文章中都是不影响的,因为在所有实际应用中的序列中的元素都满足 ai=i。
乘法
对于两个置换:
f=(a1ap1a2ap2⋯⋯anapn),g=(ap1aq1ap2aq2⋯⋯apnaqn)
那么两个置换相乘的结果为:
f∘g=(a1aq1a2aq2⋯⋯anaqn)
置换群
对于一个集合 S 的所有置换与置换乘法在一起满足封闭性、结合律、有单位元、有逆元,因此它们构成了一个群。
通常我们把 {1,2,⋯,n} 构成的置换与置换乘法组成的记作 Sn。
对于 Sn 的任意子群,我们称之为置换群。
循环置换
对于这样的特殊的置换,我们称之为循环置换。
f=(a1a2a2a3⋯⋯an−1anana1)
对于循环置换可以简记为:
f=(a1,a2,a3,⋯,an−1,an)
需要注意,下面的置换也是循环置换。
(a1a2a5a1a6a4a4a5a2a6)
置换的性质
如果两个置换不包含相同的元素,那么我们称两个置换是不相交的。
那么有性质,对于所有的置换都可以通过若干个不相交的循环乘积,例如:
(a1a3a2a5a3a1a4a2a5a4)=(a1a3a3a1)∘(a2a5a4a2a5a4)
如果把元素视为图的节点,映射关系视为有向边,则每个节点的入度和出度都为 1。
因此形成的图形必定是若干个环的集合,而一个环即可用一个循环置换表示。
我们定义如果一个置换至少通过 x 个不相交的循环置换表示,那么我们成这个置换的阶为 x。
不动点
如果序列中的一个元素 s 所在的序列经过一个置换操作 p 之后 s 的位置没有变化,那么我们称 s 是 p 操作的不动点。
定义 c(p) 表示置换 p 的不动点个数。
k 不动置换类
设 G 是 [1,n] 的一个置换群,k∈[1,n]。那么在 G 中所有的置换中能让元素 k 保持不变的全体置换构成的集合被称为 k 不动置换类,记作 Zk。
一个性质
k 不动置换类肯定是 G 的子群。
封闭性:因为所有让 k 不变的都在里面,所以具有封闭性。
结合律:因为 ∘ 本身就具有结合律,所以显然满足。
单位元:因为单位元不会造成变化,所以肯定在 Zk 中。
逆元:因为 p 的逆元 p−1 也不会让 k 变化,所以也在 Zk 中。
等价类
对于元素 k 施加任意的 G 中的置换,最终可以得到的所有的元素构成的集合就是 k 的等价类,记作 Ek,有称为轨迹。
例如 G={(1,2),(2,3),(1,3),e,(4,5),(4,5,6)},那么 E1={1,2,3}。
一个性质
当 x,y 属于一个等价类时,∣Zx∣=∣Zy∣。
考虑构造 Zx 到 Zy 之间的双射,如果构造出来那么就肯定满足 ∣Zx∣=∣Zy∣。
根据等价类的定义,∃t∈G 满足 xty 且 yt−1x。
那么对于任意的 p∈Zx 都有 yt−1xpxty,那么构造 p′=t−1pt,则必有 p′∈Zy。
于是就构造出了一组二者之间的双射。
k 不动置换类-等价类(轨道-稳定子)定理
∣Zk∣×∣Ek∣=∣G∣
设 m=∣Ek∣,设 Ek={a1(=k),a2,⋯,am}。
那么根据等价类的定义,对于每一个 ai 都存在一个 pi∈G 满足 k→piai。
设置换集合 Gi=Zk∘pi,显然有 Gi≤G,换而言之 Gi 中任何一个置换都可以让 k 变成 ai。
容易发现 i=j 时 Gi∩Gj=∅,这时因为 Gi 和 Gj 对 k 的作用时截然不同的。
所以满足 G1+G2+⋯+Gm⊆G,因为 G1+G2,⋯,Gm=G1∪G2∪⋯∪Gm。
对于 ∀p∈G,因为等价类的定义,都一定存在 kpai。
所以就有 kpaipi−1k,也就是 p∘pi−1∈Zk,换而言之 p∈Zk∘pi−1,也就是 p∈Gi。
那么就有 G⊆G1+G2+⋯+Gm,也就是证明了 G=G1+G2+⋯+Gm。
因为 Gi=Zk∘pi,所以 ∣Gi∣=∣Zk∣,也就是 ∣G∣=∣Zk∣×∣Ek∣。
Burnside 引理
我们定义等价类的个数为 Ans,其实在实际应用中 Ans 就是实际不同的答案,那么满足:
Ans=∣G∣1×p∈G∑c(p)
设 m=∣G∣,G={a1,a2,⋯,am}。
设 si,k=[kaik],那么能够发现 k=1∑nsi,k=c(ai) 而且 i=1∑msi,k=∣Zk∣。
那么有 i=1∑mc(ai)=i=1∑n∣Zi∣=i=1∑nk=1∑msi,k,i=1∑n∣Zi∣=t=1∑Ansi∈Et∑∣Zi∣。
因为同一个等价类的 Z 集合大小都是一样的,所以 i=1∑n∣Zi∣=i=1∑Ans∣Ei∣×∣Zi∣。
然而有因为 ∣Zk∣×∣Ek∣=∣G∣,所以 i=1∑n=Ans×∣G∣=p=1∑mc(ai)。
那么就得到了 Ans=∣G∣1×p∈G∑c(p)。
应用
2×2 方格中每个格子可以选择染上 2 种颜色(红色或白色)。
现在要问,如果不旋转、顺时针旋转 90 度、逆时针旋转 90 度、旋转 180 度后相同的均算成同一种方案,问总共有多少种不同的染色方案。
那么我们将所有染色方案都进行标号,得到:
那么对于不旋转的 f1 有:
f1=(1122334455667788991010111112121313141415151616)
那么右旋 90 度的 f2 有:
f2=(1122344556647889910107111212111314141515161613)
后面的都是类似的。
那么对于 f2,没有改变的元素为 {1,2},所以 c(f2)=2。
一次类推可以得到:c(f1)=16,c(f3)=2,c(f4)=4。
所以我们得到:
Ans=41×(16+2+2+3)
Pólya 定理
注意到用上面的 Burnside 定理的元素是染色方案,其序列长度是指数级的。
而 Pólya 定理处理的元素是染色的位置,可以有效的降低复杂度。
设 G 是 n 个位置的置换群,有 m 中颜色,那么染色方法为:
∣G∣1×p∈G∑T(p)
其中 T(p) 指在置换 p 下不改变的染色方案的数量。
假设 G′ 是把位置作为状态的置换群,那么可以发现把染色方案作为整体的置换和把位置作为元素的置换是有对应关系的,换而言之就是 ∣G∣=∣G′∣。
那么通过 Burnside 引理可以得到:∣G′∣1×p′∈G′∑c′(p′),其中 c′(p′) 表示 p′ 在 G 中对应的置换 p 的不动点个数。
容易发现其实 c′(p′) 和 T(p) 是等价的。
考虑怎么计算 T(p),设 D(p) 为置换 p 的阶数,那么根据乘法原理可以得到 T(p)=mD(p)。
应用
同样的问题:
2×2 方格中每个格子可以选择染上 2 种颜色(红色或白色)。
现在要问,如果不旋转、顺时针旋转 90 度、逆时针旋转 90 度、旋转 180 度后相同的均算成同一种方案,问总共有多少种不同的染色方案。
那么现在我们对位置进行编号:
对于不动的置换 f1′ 有:
f1′=(11223344)
对于 Burnside 引理中的置换,f1′ 对应 f1:
f1=(1122334455667788991010111112121313141415151616)
所以根据原始的定义有 c′(f1′)=c(f1)=16,另外 f1′=(1)(2)(3)(4),所以 T(f1′)=24=16。
对于右旋 90 的置换 f2′ 有:
f2′=(13213442)
对于 Burnside 引理中的置换,f2′ 对应 f2:
f2=(1122344556647889910107111212111314141515161613)
所以根据原始的定义有 c′(f2′)=c(f2)=2,另外 f2′ 本身就是一个循环置换,所以 T(f2′)=21=2。
经典例题
显然根据 Polya 定理有式子:
Ans=n1i=0∑n−1nc(pi)
那么有性质,对于循环置换满足 c(pi)=gcd(i,n)。
对于原本在 x 的元素,在经过 pi 的置换之后会移动到 (x+i)modn 这个位置,那么显然所有的环的长度都是 ilcm(i,n),因为 (x+i×ilcm(i,n))modn=x。
所以得到环的数量为 n×lcm(i,n)i=gcd(i,n)。
所以得到:
Ans=n1i=0∑n−1ngcd(i,n)
那么接下来对这个式子进行反演就行了。
对于循环同构的置换,套路的有旋转 x 个位置有 gcd(x,n)。
对于对称同构的情况:
- 如果 n 为奇数,那么所有的都是 2n+1。
- 否则有 2n 中在缝隙中的置换为 2n,剩下 2n 种横跨两个点的情况为 2n+1。