• 抽象代数学习笔记


    标题其实是假的,这只是 yhx 神仙的集训队论文的一半的学习笔记而已(所以只有群论

    环和域可能在 OI 里用处就不大了(毕竟两个运算还是复杂一些

    群论 (group)

    :封闭,结合,单位元,逆。

    实际上群有三个定义六个性质,有兴趣的可以搜一下(

    交换群:群,交换。

    • ( ext{mod} m) 意义下加法构成 (m) 阶循环群 (Z_m)
    • 所有 (n!)(n) 元置换构成 (n) 元对称群 (S_n)
    • 所有 (lceilfrac{n!}2 ceil)(n) 元偶置换构成 (n) 元交错群 (A_n)
    • 对于正 (n) 边形,翻转/旋转置换称为 (2n) 阶二面体群 (D_{2n})

    生成子群:对于群 ((G,circ))(varnothing e Ssubseteq G),包含 (S) 的所有子群的交称为 (S)(G) 中生成的子群,记做 (langle S angle)

    元素的阶:对于群 (G) 和其元素 (ain G)(|langle a angle|=|a|)

    陪集:对于群 (G) 和其子群 (Hle G),和元素 (gin G),定义(左)陪集 (gH={gcirc h|hin H}),同理可以定义右陪集。

    定理 2.1.1:对于子群 (Hle G),导出的陪集完全相同或交集为空。

    定理 2.1.2:对于有限群 (G) 及其子群 (Hle G),有 (|G|=|H|cdot [G:H]),其中 ([G:H]) 表示 (H) 可以导出的陪集个数。

    置换群(n) 元对称群 (S_n) 的子群。

    染色(n) 元染色指对集合 ({1,2,dots,n}) 的每个元素分配一个物品的分配方案。用 (mathbf c) 表示一个染色,(mathbf c[i]) 表示该染色中 (i) 位置的物品,(mathcal C) 表示所有染色的集合。

    置换作用于染色:对于置换 (fin S_n) 和染色 (mathbf cin mathcal C),定义 ((fcdotmathbf c)[i]=c[f^{-1}(i)])

    容易看出 (ecdotmathbf c=mathbf c)((fcirc g)cdot mathbf c=fcdot(gcdotmathbf c))

    广义染色:对于群 (G) 和全集 (mathcal C),定义运算 (G imes mathcal C ightarrowmathcal C),满足

    1. (ecdot mathbf c=mathbf c)
    2. ((fcirc g)cdotmathbf c=fcdot(gcdotmathbf c))

    则称 (mathcal C) 是广义染色集合,(mathbf cinmathcal C) 是广义染色。

    轨道(Gcdotmathbf c={gcdotmathbf cmid gin G})

    稳定子群(G_{mathbf c}={gin Gmid gcdotmathbf c=mathbf c})

    容易发现稳定子群是子群(

    定理 2.2.1 (轨道-稳定子群定理)(|Gcdotmathbf c|cdot|G_{mathbf c}|=|G|)

    proves

    证明:考虑 (gin G),对于左陪集 (gG_{mathbf c}) 中的元素 (f=gcirc h_0),有 (fcdotmathbf c=gcdot(h_0cdotmathbf c)=gcdotmathbf c)。因此左陪集 (gG_{mathbf c}) 作用于 (mathbf c) 产生相同的染色。

    考虑 (g_1,g_2in G)(g_1cdotmathbf c=g_2cdotmathbf cRightarrow (g_1^{-1}circ g_2)cdotmathbf c=g_1^{-1}cdot(g_2cdotmathbf c)=g_1^{-1}cdot(g_1cdotmathbf c)=mathbf c)。所以 (g_1^{-1}circ g_2in G_{mathbf c}),所以 (g_2in g_1G_{mathbf c}),根据定理 2.1.1,(g_1G_{mathbf c}=g_2G_{mathbf c})

    所以 (G_{mathbf c}) 导出的每个陪集作用于 (mathbf c) 得到不同的染色,所以陪集数量就等于 (G) 作用于 (mathbf c) 得到的染色数,所以 ([G:G_mathbf c]=|Gcdotmathbf c|),根据定理 2.1.2,Q.E.D。

    不动点(X^g={mathbf cin Xmid gcdotmathbf c=mathbf c})

    等价染色:对于群 (G) 和两个染色 (mathbf c_1,mathbf c_2),定义 (mathbf c_1)(mathbf c_2) 等价当且仅当 (exist gin G,gcdotmathbf c_1=mathbf c_2)

    容易发现 (mathbf c_1)(mathbf c_2) 等价当且仅当 (mathbf c_2in Gcdotmathbf c_1),或 (Gcdotmathbf c_1=Gcdotmathbf c_2)

    则等价类与轨道对应,定义 (X/G) 表示轨道集合。

    定理 2.2.2 (Burnside 引理)(|G||X/G|=sum_{gin G}|X^g|)

    proves

    证明:考虑 (sum_{gin G}sum_{mathbf cin X}[gcdotmathbf c=mathbf c])

    枚举置换,贡献为不动点数量,即为 (sum_{gin G}|X^g|)

    枚举染色,贡献为稳定子群大小,即为 (sum_{mathbf cin X}|G_mathbf c|=|G|cdotsum_{mathbf cin X}frac 1{|Gcdotmathbf c|})

    每个轨道内的元素贡献 1/轨道大小,所以每个轨道贡献 (1),即为 (|G||X/G|)。Q.E.D.

    Polya 计数

    置换的循环指标:对于 (n) 元置换 (g=(a_{11}a_{12}dots a_{1L_1})dots(a_{y1}a_{y2}dots a_{yL_y})),定义它的循环指标是 (prod t_{L_i}),其中 (t_1,t_2,dots,t_n) 为形式变元。

    置换群的循环指标:对于置换群 (G),定义它的循环指标为群中所有置换的指标的平均值,记做 (Z_G(mathbf t))

    定理 2.3.1 (Polya 定理) 定义 (f(t)=sum_{wge 0}f_wt^w),其中 (f_w) 表示权值为 (w) 的颜色数量。定义染色 (mathbf c) 的权值 (omega(mathbf c)=sum_{i=1}^nomega(mathbf c[i]))。定义 (F(t)) 表示在 (G) 的作用下每种权值的染色的不同轨道数的生成函数。则

    [F(t)=Z_G(f(t),f(t^2),dots,f(t^n)) ]

    定理 2.3.2 (广义 Burnside 引理)

    [sum_{Oin X/G}omega(G_O)|O|=sum_{gin G}omega(g)|X^g| ]

    其中每个置换 (gin G) 有权值 (omega(g)),子群的权值 (omega(G_O)=sum_{gin G_O}omega(g))

    证明:考虑 (sum_{gin G}sum_{mathbf cin X}[gcdotmathbf c=mathbf c]omega(g))

    推论 2.3.1 (Polya 容斥) 在定理 2.3.2 中取 (omega(g)= ext{sgn}(g)) 即可得到

    [|G|sum_{Oin X/G}left[mathbf cin O,i e jRightarrow mathbf c[i] e mathbf c[j] ight]=sum_{gin G} ext{sgn}(g)|X^g| ]

    【ZJOI2018】树

    题目描述:给定正整数 (n,k) 和质数 (p)。设 (mathcal T) 是所有以 (1) 为根的 (n) 个点的带标号树构成的集合,(E_1,E_2,dots,E_{lambda}) 是同构等价类,求 (dfrac{sum_{i=1}^{lambda}|E_i|^k}{n!^k}mod p)

    数据范围:(nle 2000,kle 10^9,10^8<p<10^9)

    xyx 为什么这么强啊

    solution

    设有根无标号树的组合类为 (mathcal T),考虑 (alphainmathcal T),设其形成的等价类个数为 (omega(alpha))

    对于两个等价类定义笛卡尔积,容易发现 (omega(t_1 imes t_2)=omega(t_1)omega(t_2)inom{|t_1|+|t_2|}{|t_1|})

    为了用生成函数描述,设 (T(mathcal A;z)=sum_{alphainmathcal A}left(frac{omega(alpha)}{|alpha|!} ight)^kz^{|alpha|}),所求即为 ([z^n]T(mathcal A;z))

    容易发现 (T(mathcal A+mathcal B)=T(mathcal A)+T(mathcal B),T(mathcal A imesmathcal B)=T(mathcal A)T(mathcal B))

    然后看回 (mathcal T),众所周知 (mathcal T^{square}= ext{MSET}(mathcal T)),其中 (mathcal T)(mathcal T^{square}) 上加一个固定标号的根,也即 ([z^n]T(mathcal T)=frac 1{n^k}[z^{n-1}]T(mathcal T^{square}))。然后就可以推柿子了:

    [egin{aligned} T(mathcal T^square)&=T( ext{MSET}(mathcal T)) \ &=Tleft(expsum_{ige 1}frac 1isum_{tinmathcal T}t^i ight) \ &=Tleft(prod_{ige 1}prod_{tinmathcal T}sum_{jge 0}frac{t^{ij}}{i^jj!} ight) \ &=prod_{ige 1}prod_{tinmathcal T}sum_{jge 0}frac{T(t)^{ij}}{i^jj!} \ &=expsum_{ige 1}sum_{tinmathcal T}frac{T(t)^i}i end{aligned} ]

    发现这里的次数有变化,所以考虑再加一维,使次数可以变动。

    [T(mathcal A;z,u)=sum_{alphainmathcal A}frac{z^{|alpha|}}{1-frac{omega(alpha)}{|alpha|!}u} ]

    乘法定义为 (z) 卷积,(u) 点积。然后就可以得到:

    [egin{aligned} [u^k]T(t;z)^i&=omega(t)^{ik}frac{z^{i|t|}}{|t|!^{ik}}=[u^{ik}]T(t;z^i) \ [u^kz^n]T(mathcal T;z)&=frac 1{n^k}[z^{n-1}]expsum_{ige 1}frac{[u^{ik}]T(mathcal T;z^i)}{i} \ end{aligned} ]

    然后差不多乱搞搞就可以 (O(n^2)) 算了?

    然后看 Polya 计数的方法,也是算同样的答案:各等价类大小的 (k) 次方之和。

    (f_n) 表示 (n) 个点时的答案,(g_{i,s}) 表示所有树大小 (le i),总和 (=s) 的森林对应的答案,则 (f_i=g_{i-1,i-1}),初值为 (g_{1,s}=1)

    转移考虑枚举当前加入了 (d) 个大小为 (i) 的树,即为

    [g_{i,s}=sum_{d=0}^{lfloorfrac si floor}g_{i-1,s-di}I_{i,d}inom{s}{di}^k ]

    (I_{i,d}) 表示所有 (d) 棵大小为 (i) 的树构成的带标号有根森林的答案......

    然后一个字都看不懂啊啊啊啊啊


    u1s1,想起来当时做这题的时候,Euler 变换有 Polya 的推法,也有生成函数的推法,也就是解析组合(还可以更高大上地叫做组合结构符号化)

    要理解群论计数还是好烧脑子,不如多练练上面那种做法(就是不知道适用范围怎么样了

    群的判定和表示

    不变子群:对于群 ((G,circ)) 及子群 (Hle G),若 (gin G,hin HRightarrow gcirc hcirc g^{-1}in H),则称 (H)(G) 的不变子群,记做 (Hunlhd G),此时若 (H e G)(H)(G) 的真不变子群,记做 (Hlhd G)

    商群:对于群 ((G,circ)) 及不变子群 (N),在 (N) 的所有陪集 (G/N) 上定义运算 (cdot) 满足

    [(aN)cdot (bN)=(acirc b)N ]

    则称 ((G/N,cdot))(G)(N) 的商群。

    可以手算验证一下,考虑 (h_1,h_2in H,a,bin G)

    [egin{aligned} &(acirc h_1)circ (bcirc h_2) \ =&acirc h_1circ(bcirc h_2circ b^{-1})circ b \ =&(acirc b)circ(b^{-1}circ (h_1circ (bcirc h_2circ b^{-1}))circ b) end{aligned} ]

    后面那一大坨显然 (in N),也就是说 ((aN)circ(bN)subseteq (acirc b)N)

    同态:对于群 ((G,circ),(H,cdot)),若映射 (f:G ightarrow H) 满足

    [f(acirc b)=f(a)cdot f(b) ]

    则称 (f)(G)(H) 的同态映射,简称同态。

    (f) 是单射/满射/双射 时,称为单同态/满同态/同构。

    :设 (f)(G)(H) 的同态,(e_H)(H) 的单位元,则集合

    [f^{-1}(e_H)={gin Gmid f(g)=e_H} ]

    称为 (f) 的核,记做 (ker f)

    显然 (ker f) 是不变子群。

    定理 3.1.1 (群同态基本定理)(f)((G,circ))((H,cdot)) 的满同态,则 (G/ker f)(H) 同构。

    proves

    证明:设 (K=ker f),定义 (phi:G/K ightarrow H),其中 (phi(gK)=f(g))

    显然 (phi) 是映射,现在考虑证明 (phi) 是同构。

    • (gK,hKin G/KRightarrow phi((gcirc h)K)=f(gcirc h)=f(g)cdot f(h)=phi(gK)cdotphi(hK))。所以 (phi) 是同态。
    • (phi(gK)=phi(hK)),则 (f(g)=f(h)Rightarrow f(gcirc h^{-1})=f(g)cdot f(h^{-1})=f(g)cdot f(h)^{-1}=e_H),所以 (gcirc h^{-1}in KRightarrow gK=hK),所以 (phi) 是单射。
    • (forall hin H,exist gin G,f(g)=h),所以 (phi(gK)=f(g)=h),所以 (phi) 是满射。

    综上,(phi) 是双同态,所以 (G/K)(H) 同构。

    定理 3.1.2 (群同构第三定理)(N)(G) 的不变子群,则

    • (Nle Hle GLeftrightarrow H/Nle G/N)
    • (Nle Hunlhd GLeftrightarrow H/Nunlhd G/NRightarrow frac{G/N}{H/N}cong G/H)

    群的判定

    题目描述:给定 (n imes n) 的乘法表,判断它是否是群。

    封闭性、单位元、逆元都很好检验,最重要的是结合律。

    引理 3.2.1 给定 (n) 阶有限群 (G),存在 (Ssubseteq G) 使得 (|S|lelfloorlog_2 n floor),且 (G=langle S angle)

    proves

    证:定义子群链 ({e}=G_0le G_1ledotsle G_k=G),其中 (G_i=langle{g_1,g_2,dots,g_i} angle)

    构造方法如下:设我们已经知道 (G_0,G_1,dots,G_{i-1}),现在要知道 (G_i)。若 (G_{i-1}=G) 则完成构造,否则任取 (g_iin Gackslash G_{i-1}),令 (G_i=langle G_{i-1}cup{g_i} angle),根据消去律,(|G_i|ge 2|G_{i-1}|),所以 (nge 2^k|G_0|),即 (klelfloorlog_2 n floor)

    引理 3.2.2((G,circ)) 满足封闭、单位元、逆元,(G=langle S angle),则 (G) 满足结合律 (Leftrightarrow(sin S,g,hin GRightarrow (gcirc s)circ h=gcirc(scirc h)))

    proves

    证:(Rightarrow) 显然,考虑 (Leftarrow)

    (A={s|forall g,hin G,(gcirc s)circ h=gcirc (scirc h)}),则 (a,bin ARightarrow (gcirc(acirc b))circ h=((gcirc a)circ b)circ h=(gcirc a)circ (bcirc h)=gcirc (acirc (bcirc h))=gcirc((acirc b)circ h)Rightarrow acirc bin A),因为 (Ssubseteq A),由该结论可得 (langle S angle=Gsubseteq A),即 (G) 满足结合律。

    使用这个方法就可以在 (O(n^2log n)) 的时间复杂度内判断结合律。

    对于群 (G) 及其元素 (gin G),定义映射 (lambda_g(x)=gcirc x),则 (lambda_g(x)) 是双射,且 (lambda_g(lambda_h(x))=lambda_{gcirc h}(x))(lambda_g(x))(lambda_{g^{-1}}(x)) 互为逆映射,且 (lambda_g) 是一个 (G) 上的置换,而 ({lambda_gmid gin G}) 构成了一个置换群,即 (|G|) 元对称群的子群。

    定理 3.3.1 (Cayley 定理) 每个 (n) 阶有限群都同构于一个不超过 (n) 元的置换群。

    UOJ154【UR #10】列队

    题目描述:给定群 (G) 和正整数 (n),求 (G)(n) 元对称群 (S_n) 的单同态个数(mod 998244353)(T) 组数据。

    数据范围:(Tle 10,|G|le 30,nle 1000)

    solution

    对于群 (G,H),设 (G)(H) 的同态数量为 ( ext{homo}(G,H)),单同态数量为 ( ext{mono}(G,H))

    考虑一个同态 (f:G ightarrow H),设 (K=ker f),则 (G/K)( ext{im} f) 之间存在同构 (phi),则将同构 (phi) 的陪域扩展到 (H) 就得到了 (G/K)(H) 的单同态。由此可得,(G)(H) 的每个同态都对应到 (G/N)(H) 的一个单同态,其中 (N)(G) 的不变子群。

    [ ext{homo}(G,H)=sum_{Nunlhd G} ext{mono}(G/N,H) ]

    现在就可以转化为计算若干个 ( ext{homo}(G,H)) 的子问题。

    考虑给定群 (G) 计算到 (S_n) 的同态个数。对于置换群 (H= ext{im} f),定义 (i) 的特征染色 (chi_i)(i) 位置为黑色,其他位置为白色。则 (forall iin[1,n])(Hcdot chi_i) 中黑色出现位置的集合,构成了 ({1,2,dots,n}) 的一个划分。

    考虑其中一个集合 (A),而 (|A|=k),不妨设 (1in A),则 (|Hcdotchi_1|=k),根据轨道-稳定子群定理,(H_{chi_1}=frac{|H|}{|Hcdotchi_1|}=frac{|H|}k)。根据同态的性质,(H_{chi_1}) 的原象是 (G) 的一个 (frac{|G|}k) 阶子群。感性理解一下???

    然而我们要求的是 (f) 的个数,所以要用 (G) 的结构表示 (f)

    容易发现划分的各个集合之间互不影响,只需要对应好然后给划分的元素标好号即可。

    考虑 (1) 所在的划分,假设是 ({2,3,dots,k}),在 (G) 中搞一个大小为 (frac{|G|}k) 的子群 (S),令它的象为 (H_{chi_1}),那么 (S) 导出的 (k) 个左陪集作用于 (chi_1) 之后将黑色分别移动到 (1,2,dots,k)

    设这 (k) 个左陪集为 (S,g_2S,dots,g_kS),不妨设 (g_iS) 将黑色移到 (i),这里的标号有 ((k-1)!) 种。

    然后发现确定好 (g_i) 之后就确定好了所有置换,具体来说,(gin G,sin SRightarrow g(j)=g((g_jcirc s)(1))=(gcirc g_jcirc s)(1)=(gcirc g_j)(1))。也就是说 (g(j))(gcirc g_j) 唯一确定,与 (s) 没有关系。

    现在就可以直接计数了,每个划分的集合是带标号无序组,所以是 EGF 的 exp 形式,

    [f(x)=sum_kfrac{x^k}ksum_{Hunlhd G,|H|=frac{|G|}k}=sum_{Hunlhd G}frac{x^{|G|/|H|}}{|G|/|H|} \ ext{homo}(G,S_n)=n![x^n]exp f(x) ]

    #include<bits/stdc++.h>
    #define PB emplace_back
    #define MP make_pair
    #define fi first
    #define se second
    using namespace std;
    typedef long long LL;
    typedef pair<int, int> pii;
    const int N = 30, M = 1003, mod = 998244353;
    template<typename T>
    void read(T &x){
    	int ch = getchar(); x = 0; bool f = false;
    	for(;ch < '0' || ch > '9';ch = getchar());
    	for(;ch >= '0' && ch <= '9';ch = getchar()) x = x * 10 + ch - '0';
    	if(f) x = -x;
    }
    template<typename T>
    bool chmax(T &a, const T &b){if(a < b) return a = b, 1; return 0;}
    template<typename T>
    bool chmin(T &a, const T &b){if(a > b) return a = b, 1; return 0;}
    void qmo(int &x){x += x >> 31 & mod;}
    int T, n, m, e, A[N][N], inv[N], sta[M], siz[M], fr, re, q[N], f, r, iv[M], F[M];
    set<int> S; bool reg[M];
    bool regu(int x){
    	for(int i = 0;i < m;++ i)
    		for(int j = 0;j < m;++ j)
    			if((x >> j & 1) && !(x >> A[A[i][j]][inv[i]] & 1))
    				return false;
    	return true;
    } int cnt[M], d[M];
    int calc(int x){
    	memset(cnt, 0, sizeof cnt);
    	memset(d, 0, sizeof d);
    	for(int i = 0;i < re;++ i)
    		if((sta[x] & sta[i]) == sta[x]) ++ cnt[m / siz[i]];
    	d[0] = 1;
    	for(int i = 1;i <= n;++ i){
    		for(int j = 1;j <= m && j <= i;++ j)
    			d[i] = (d[i] + (LL)cnt[j] * d[i-j]) % mod;
    		d[i] = (LL)d[i] * iv[i] % mod;
    	} return d[n];
    }
    int dfs(int x){
    	if(~F[x]) return F[x];
    	int &ans = F[x]; ans = calc(x);
    	for(int i = 0;i < re;++ i)
    		if(x != i && reg[i] && ((sta[x] & sta[i]) == sta[x]))
    			qmo(ans -= dfs(i));
    	return ans;
    }
    void solve(){
    	read(n); read(m); e = -1; S.clear(); memset(F, -1, sizeof F);
    	bool ff = false;
    	for(int i = 0;i < m;++ i){
    		bool flg = true;
    		for(int j = 0;j < m;++ j){
    			read(A[i][j]); -- A[i][j];
    			flg &= A[i][j] == j;
    		} if(flg && e >= 0) ff = true;
    		if(flg) e = i;
    	} if(e == -1 || ff){puts("0"); return;}
    	for(int i = 0;i < m;++ i){
    		inv[i] = -1;
    		for(int j = 0;j < m;++ j)
    			if(A[i][j] == e){inv[i] = j; break;}
    		if(inv[i] == -1){puts("0"); return;}
    	}
    	for(int i = 0;i < m;++ i)
    		for(int j = 0;j < m;++ j)
    			for(int k = 0;k < m;++ k)
    				if(A[A[i][j]][k] != A[i][A[j][k]]){puts("0"); return;}
    	e = 1 << e; fr = re = 0; sta[re++] = e;
    	while(fr < re){
    		int u = sta[fr++];
    		for(int i = 0;i < m;++ i) if(!(u >> i & 1)){
    			int v = u | (1<<i); f = r = 0; q[r++] = i;
    			while(f < r){
    				int x = q[f++];
    				for(int j = 0;j < m;++ j) if(v >> j & 1){
    					if(!(v >> A[x][j] & 1)){v |= 1 << A[x][j]; q[r++] = A[x][j];}
    					if(!(v >> A[j][x] & 1)){v |= 1 << A[j][x]; q[r++] = A[j][x];}
    				}
    			} if(!S.count(v)){S.insert(v); sta[re++] = v;}
    		}
    	} sort(sta, sta + re); for(int i = 0;i < re;++ i){reg[i] = regu(sta[i]); siz[i] = __builtin_popcount(sta[i]);}
    	int ans = dfs(lower_bound(sta, sta + re, e) - sta);
    	for(int i = 1;i <= n;++ i) ans = (LL)ans * i % mod; printf("%d
    ", ans);
    }
    int main(){
    	iv[1] = 1; for(int i = 2;i < M;++ i) iv[i] = mod - (LL)mod / i * iv[mod % i] % mod;
    	read(T); while(T --) solve();
    }
    

    关于 (n) 阶群的子群个数有一个上界 (O(n^{log n}log n))然而看上去就超松的样子,分析方法大概就是上面的引理 3.2.1,枚举生成子群的集合。

    (|G| le 30)(G) 的子群个数的最大值是 (67),当 (G=_2^4) 时取到。

    于是你想知道 (_2^m) 的子群个数不你不想,结果 oeis 出来好东西(

    高斯二项式系数

    q-number :

    [[k]_q=sum_{i=0}^{k-1}q^i=egin{cases}frac{1-q^k}{1-q} & pod{q e 1} \ k & pod{q=1}end{cases} ]

    q-factorial :

    [[n]_q!=prod_{k=1}^n[k]_q ]

    q-binom :

    [inom nm_q=frac{[n]_q!}{[m]_q![n-m]_q!} \ inom nm_q=q^minom{n-1}m_q+inom{n-1}{m-1}_q \ inom nm_q=inom{n-1}m_q+q^{n-m}inom{n-1}{m-1}_q ]

    容易发现 (q=1) 时这就是通常的二项式系数。

    根据递推公式得到 (qinRightarrowinom nm_qin)

    性质 1 : 在所有桶为 ({c}_{i=1}^m) 的正整数序列 ({a}_{i=1}^n) 中((n=sum_{i=1}^m c_i)),已知逆序对个数所对应的方案数的生成函数是

    [inom n{c_1,dots,c_m}_q=frac{[n]_q!}{prod_{i=1}^m[c_i]_q!} ]

    证明:想了好久组合意义,结果发现写出递推公式就完事了???

    可以用这个来出模板题(我谔谔

    性质 2 : 当 (q) 为质数时,(_q^n) 的大小为 (q^m) 的(不变)子群个数,或 (mathbb F_q^n)(m) 维子空间个数为 (inom nm_q)

    证明:想了好久组合意义,结果发现写出递推公式就完事了???

    有 dalao 知道组合意义么...(我自闭

    性质 3 (行的生成函数)

    [prod_{k=0}^{n-1}(1+q^iz)=sum_{m=0}^nq^{inom m2}inom nm_qz^m ]

    证明:不想组合意义,归纳就完事了!!!

    性质 4

    [sum_{m=0}^n(-1)^mq^{inom m2}inom nm_q=[n=0] ]

    证明:上面那条柿子代入 (z=-1) 即可。

    性质 5 (高斯二项式反演)

    [b_n=sum_{m=0}^ninom nm_qa_mLeftrightarrow a_n=sum_{m=0}^n(-1)^mq^{inom m2}inom nm_qb_m ]

    证明:

    [left(sum_{nge 0}frac{z^n}{[n]_q!} ight) imesleft(sum_{nge 0}(-1)^nq^{inom n2}frac{z^n}{[n]_q!} ight)=1 ]

    可是这东西有个jb用啊...

    计算群论

    题目描述:给定 (n) 阶置换群 (S_n)(m) 个元素,求这 (m) 个元素生成的子群阶数。

    数据范围:(n,mle 50)

    计算群论研究形如 (langle S angle) 构成的“群论结构”,Schreier-Sims 算法是其中最基础的算法。


    考虑构造子群链 (langle S angle=G_0ge G_1gedotsge G_k={e}),则 (|G|=prod_{i=0}^{k-1}frac{|G_i|}{|G_{i+1}|}=prod_{i=0}^{k-1}[G_i:G_{i+1}])

    考虑增量构造法,逐渐向 (S) 中添加元素,对子群链中的每个子群进行维护。

    初始时 (S=varnothing,G={e}),要向 (S) 中添加新元素 (g),需要判断 (g) 是否已经在 (langle S angle) 中。

    定义 4.1 (截面) 对于群 (G) 及其子群 (Hle G),设 (H) 导出的左陪集集合为 (C_1,C_2,dots,C_k),其中 (k=[G:H]),则包含单位元的集合 (R={r_1,r_2,dots,r_k}),其中 (r_iin C_i),称作 (H) 的一个左截面。同理可以定义右截面。

    考虑 (H=G_{chi_1}) 的一个右截面 (R={e=r_1,r_2,dots,r_k}),满足

    • (forall i e j,Hr_i e Hr_j),也就是 (r_icirc r_j^{-1} otin H)
    • 考虑陪集 (Hr_i),任取其中元素 (h_0circ r_i),有 ((h_0circ r_i)^{-1}(1)=(r_i^{-1}circ h_0^{-1})(1)=r^{-1}_i(h_0^{-1}(1))=r^{-1}(1))
    • (forall gin G),根据 (g^{-1}(1)) 可以唯一确定其所在的陪集 (Hr_i),也就是 (r_i=Hgcap R),称其为 (g) 的标准置换 ( ext{norm} g)

    然后考虑元素判定,此时若 (ginlangle S angle),则存在 (r_i) 使得 ((r_icirc g)(1)=1Rightarrow r_icirc gin HRightarrow r_iin Hg^{-1}),也就是求 ( ext{norm}(g^{-1}))

    关于如何求 ( ext{norm}(g)),则可以先求出 (g^{-1}(1)),找到 (1) 的原象与其相同的 (r_i) 即可。

    然后就有 (gin GLeftrightarrow r_icirc gin G_{chi_1}),递归下去即可。


    然后继续考虑增量构造,改变了 (S) 之后考虑截面 (R) 发生的变化。

    (R) 中每个元素记录 (1) 不同的原象,只需要考虑 (1) 多了哪些原象即可。

    设原先 (1) 的原象集合为 (A_1),新增置换 (g) 后,考虑置换 (r_icirc g)。也就是 (forall pin A_1),设 (r_i(p)=1),则 ((r_icirc g)^{-1}(1)=(g^{-1}circ r_i^{-1})(1)=g_i^{-1}(r_i^{-1}(1))=g_i^{-1}(p)),也就是 (g_i^{-1}(p)) 也是 (1) 的原象,枚举 (A_1) 中元素搜索即可。


    然后继续考虑增量构造,改变了 (R) 之后对稳定子群 (G_{chi_1}) 生成集 (S') 的影响。

    引理 4.1 (Schreier) 设群 (H)(G=langle S angle) 的子群,(R)(H) 的右截面,

    [S'={(rcirc s)circ( ext{norm}(rcirc s))^{-1}mid rin R,sin S} ]

    (H=langle S' angle)

    证明:显然 (forall gin G,gcirc( ext{norm}(g))^{-1}in H),所以 (langle S' anglesubseteq H)。考虑证明 (Hsubseteqlangle S' angle)

    因为 (ein R),所以 (forall hin H)(h) 可以表示为 (rcirc s_1circcdotscirc s_k),其中 (rin R,s_iin S)

    考虑归纳证明上述表示的元素 (inlangle S' angle),当 (k=0)(h=rin Hcap R={e}),所以 (hinlangle S' angle)

    假设 (k-1) 时此结论成立,考虑 (k) 时,有

    [egin{aligned} h&=rcirc s_1circcdotscirc s_k \ &=(rcirc s_1)circ( ext{norm}(rcirc s_1)^{-1})circ ext{norm}(rcirc s_1)circ s_2circcdotscirc s_k end{aligned} ]

    根据归纳假设,( ext{norm}(rcirc s_1)in R,s_iin SRightarrow ext{norm}(rcirc s_1)circ s_2cdots s_kinlangle S' angle),又因为 ((rcirc s_1)circ( ext{norm}(rcirc s_1))^{-1}inlangle S' angle),所以 (hinlangle S' angle),成立,Q.E.D.

  • 相关阅读:
    批量启动application pool
    sql server文件另存为的时候,选择文件编码和换行
    insert into 和 where not exists
    tcp slowstart (TCP 慢启动)
    如何在CentOS7上改变网络接口名
    Window系统命令行调用控制面板程序
    Using Let’s Encrypt for free SSL Certs with Netscaler
    端口相关知识学习笔记
    win7下KiWi Syslog服务器的安装与配置
    MPS添加管理设备实例NS的过程
  • 原文地址:https://www.cnblogs.com/AThousandMoons/p/14398984.html
Copyright © 2020-2023  润新知