zoukankan      html  css  js  c++  java
  • 群论学习笔记

    群的定义

    给定一个集合 (G={a,b,ccdots}) 和集合上的二元运算 "(*)",如果满足以下条件:

    (1)封闭性。对于任意的 (a,b in G,a*bin G) 成立。

    (2)结合律。对于任意 (a,b,c in G,a*(b*c)=(a*b)*c) 成立。

    (3)存在单位元(G) 中存在一个元素 (e),使得对于 (G) 中任意元素 (a) ,都有 (a*e=e*a=a),元素 (e) 为单位元素。

    (4)存在逆元。对于 (G) 中任意元素 (a),恒有一个 (b in G) ,使得 (a*b=b*a=e),则元素 (b) 为元素 (a) 的逆元,记作 (a^{-1})

    则称集合 (G) 是运算 "(*)" 下的一个群

    置换群

    置换,就是给我们一个 (n) 个数的排列 $1 , 2 ,cdots n $ ,我们通过置换得到 (1 sim n) 的映射 (p_1,p_2,p_3cdots p_n)

    它们一一对应:(inom{1 2 3 ...n}{p_{1} p_{2} p_{3} ...p_{n}})

    置换实际上就表示为元素位置的变化

    集合 (S)上的所有置换关于置换的乘法满足封闭性、结合律、有单位元(恒等置换,即每个元素映射成它自己)、有逆元(交换置换表示中的上下两行),因此构成一个群

    这个群的任意一个子群即称为置换群

    有一种特殊的置换叫做循环置换

    (m) 阶循环记为 (inom{a_{1} a_{2} ... a_{m-1} a_{m}}{a_{2} a_{3} ... a_{m} a_{1}})

    特别的,当 (m=2) 时,(2) 阶循环 ((i,j)) 叫做 (i)(j) 的对换或换位

    Burnside引理

    定义 (G) 为一个置换群,定义其作用于 (X),如果 (x,yin X)(G)作用下可以相等即存在 (fin G) 使得 (f(x)=y) 则定义 (x,y) 属于一个等价类,则不同的等价类的数量为:

    (|X/G|=dfrac{1}{|G|}sum_{gin G} X^g)

    其中, (X^g)(X)(g) 作用下的不动点的数量,即满足 (g(x)=x)

    简单来说,就是每个置换的不动点的个数的平均值就是不同的方案数

    举一个例子

    如图所示,(2×2) 方格中每个格子可以选择染上(2) 种颜色(红色或白色),那么总共是 (2^4=16) 种情况

    现在要问,如不旋转、顺时针旋转 (90) 度、逆时针旋转 (90) 度、旋转 (180) 度后相同的均算成同一种方案,问总共有多少种不同的方案

    可以把四种操作分别看成四种置换

    分别统计这四种置换下不动点的个数

    (1)、不旋转,所有的元素均为不动点,一共有 (16)

    (2)、顺时针旋转 (90) 度,不动点有 (1,2)

    (3)、逆时针旋转 (90) 度,不动点有 (1,2)

    (4)、旋转 (180) 度,不动点有 (1,2,11,12)

    答案为 (frac{16+2+2+4}{4}=6)

    Polya 定理

    对于每一种置换,我们一定可以把它表示为循环的形式

    定义循环的循环节为循环的个数

    (k) 为颜色种类,(m(f)) 为置换 (f) 的循环节

    在置换群中,等价类个数(方案数)等于所有置换 (f)(k^{m(f)}) 的平均数,即

    (dfrac{1}{|G|}sum_{gin G}m^{c(g)})

    对于每一个循环,如果想让这个循环中有不动点,那么这个循环中所有元素的颜色应该是相同的

    而不同的循环之间是没有影响的,所以一个循环的答案就是 (m^{c(g)})

    同样是上面的例子

    (1、)不旋转,(f_1 = inom{1234}{1234} = (1)(2)(3)(4), C(f) = k ^ {m(f)} = 2 ^ 4 = 16)

    (2)、顺时针旋转 (90) 度,(f_2 = inom{1234}{2341} = (1,2,3,4), C(f) = k ^ {m(f)} = 2 ^ 1 = 2)

    (3)、逆时针旋转 (90) 度,(f_1 = inom{1234}{4123} = (1,2,3,4), C(f) = k ^ {m(f)} = 2 ^ 1 = 2)

    (4)、旋转 (180) 度,(f_1 = inom{1234}{3412} = (1,3)(2,4), C(f) = k ^ {m(f)} = 2 ^ 2 = 4)

    答案为 (frac{16+2+2+4}{4}=6)

    例题

    P4980 【模板】Pólya 定理

    题目传送门

    这道题中一共有 (n) 种不同的置换,分别是整体平移 (1 sim n) 个单位

    假设平移了 (i) 个单位,那么要平移 (lcm(i,n)) 步才能回到起点

    那么循环节为 (frac{in}{lcm(i,n)}=gcd(i,n))

    就可以直接套用 (polya) 定理

    (ans=frac{1}{n}sumlimits_{i=1}^n n^{gcd(i,n)})

    进行一下莫比乌斯反演,答案就为 (sumlimits_{d|n}n^dvarphi(n/d))

    P1446 [HNOI2008]Cards

    题目传送门

    因为有使用颜色的限制所以不能直接套用 (polya) 引理

    而要枚举每一种置换下不动点的个数

    因为题目中的洗牌法并不存在单位元,所以强制加入一种所有牌都不变的洗牌法

    对于每一个循环,他们内部的位置的染色必须是相同的

    所以单独考虑每个循环染哪种颜色,可以通过一个类似背包的过程实现

    周末晚会

    Irena和Sirup正准备下个周末的Party。为这个Party,他们刚刚买了一个非常大的圆桌。他们想邀请每个人,但他们现在不知道如何分配座次。Irena说当有超过K个女孩座位相邻(即这些女孩的座位是连续的,中间没有男孩)的话,她们就会说一整晚的话而不和其他人聊天。 Sirup没有其他选择,只有同意她。然而,作为一名数学家,他很快地痴迷于所有可能方案。 题目说明: N个人围绕着圆桌坐着,其中一些是男孩,另一些是女孩。你的任务是找出所有合法的方案数,使得不超过K个女孩座位是连续的。 循环同构会被认为是同一种方案。对于100%的数据N,K < = 2000;mod 100000007

    可以把循环看成 (n) 种置换

    那么要统计的就是每一种置换下不动点个数的平均数

    如果 (n leq k) ,那么就没有任何限制,可以直接套一个 (polya) 引理

    否则,就要用 (dp) 去统计方案

    (f[i]) 为序列的首尾都放男孩,并且不超过 (k) 个女孩的座位是连续的方案数

    转移也很简单, (f[i]=sum_{j=i-k-1}^{i-1}f[j])

    统计答案的时候要从 (1)(n) 枚举每一种置换 (i),那么循环节就是 (gcd(i,n))

    通过旋转这个循环节可以得到其它循环节

    这些循环节是完全相同的,所以只需要统计一个循环节的答案即可

    那么贡献就是 (sum_{j=gcd(i,n)-k}^{gcd(i,n)} f[j] imes (gcd(i,n)-j+1))

    后面乘上的部分是因为我强制了第一个选男生,但实际上第一个位置是可以选女生的

    我可以把后面的每一个女生都旋转到前面来

    P4128 [SHOI2006] 有色图

    题目传送门

    图的同构问题

    (Polya) 定理是用来解决点置换的,但是这道题要求的是边置换

    那么就考虑边的两个端点分别在哪个循环中

    分为两类:

    (1)、边的两个端点在同一循环中

    设循环的长度为 (b)

    如果端点之间的间距不同,那么两条边一定不在一个等价类中

    又因为是在循环中,所以间距 (x) 也可以看成间距 (b-x)

    那么等价类的个数就是 (leftlfloorfrac{b}{2} ight floor)

    (2)、边的两个端点在不同循环中

    设这两个循环的长度分别为 (b_1,b_2)

    每一个边的循环的大小都是 (lcm(b_1,b_2))

    那么边的等价类的个数就是 (frac{b_1b_2}{lcm(b_1,b_2)}=gcd(b_1,b_2))

    设点的循环的长度为 (b_1,b_2,b_2 cdots b_k)

    那么最终的答案就是

    [Large frac{1}{|G|} sumlimits_b m^{sumlimits_{i=1}^kleftlfloorfrac{b_i}{2} ight floor+sumlimits_{i=1}^ksumlimits_{j=i+1}^k gcd(b_i,b_j)} ]

    现在的问题就是如何枚举 (b)

    因为 (n) 的范围比较小,所以可以考虑 (dfs) 从大到小加数

    对于每一个枚举出来的 (b) ,我们还要知道具体有多少置换是这样的

    首先对于所有的点进行全排列,就是一个 (n!)

    又因为每一个循环内部都是循环同构的,所以要除掉 (b_i)

    而且我们强行给长度相同的循环规定了顺序

    所以对于长度为 (i) 的循环,如果它出现了 (s_i) 次,还要给最后的结果除掉 (s_i!)

    要除以的是给指数取模的时候要模 (phi) ,而不能模 (mod)

  • 相关阅读:
    工厂方法模式
    单例模式
    .NET平台下几种SOCKET模型的简要性能供参考
    easy ui 教程
    ACCESS数据库改名asp或asa
    库函数strcpy/strlen的工作方式
    opencv cvPreCornerDetect
    BlobTracker
    图像处理 Mine
    几种常见模式识别算法整理和总结
  • 原文地址:https://www.cnblogs.com/liuchanglc/p/14454088.html
Copyright © 2011-2022 走看看