首页 > 其他分享 >不用群论的 Polya

不用群论的 Polya

时间:2024-06-17 09:12:47浏览次数:21  
标签:FR 排列 置换 不用 循环 群论 不动点 Polya sigma

如果没有学过正经的带群论的 \(Polya\),那这一篇文章也许是一个简单的入门;如果学过正经的 \(Polya\),这一篇也可能提供一个感性理解的方法(因为除了不用群论也没有什么好处)。

Burnside

一道组合题一般会说

两个图等价当且仅当可以通过重编号使之全等
两个环等价当且仅当可以通过旋转使之重合

先考虑一个简单题:

求环排列数 \(\pi_n\)

这时的要求就是上面第二个。

一个 \(\text{naive}\) 的想法是环排列不多于排列,\(\pi_n\le n!\) 。

不等式成立的原因是有一些情况被重复数了,那一个更 \(\text{naive}\) 的想法是我知道每种情况被数了多少次不就可以了。

比如用 \([1,2,3]\) 表示一个环排列,不考虑重复时,长为 \(3\) 的环排列有 \([1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]\)。

容易知道 \(\pi_3=2\),因为 \([1,2,3]\) 旋转一次变成 \([2,3,1]\),再转一次变成 \([3,1,2]\)。

采用一种均摊的思想,可以认为之前 \(6\) 种环排列,每种对应了有效的 \(\frac13\) 种。

因为我们有 \(3\) 种旋转(不转,转一次,转两次,再多就还原了),任意环排列对每种旋转都会得到看上去不同,但本质相同的环排列。

类似的,\(\pi_n\) 中每个看上去不同的环排列对应的 \(n\) 种旋转都会得到看起来不同,但本质相同的环排列,可以视作对应有效的 \(\frac1n\) 种。

于是我们知道 \(\pi_n=\frac1n\times n!=(n-1)!\)(任意排列对应看上去不同的环排列,但只有有效的 \(\frac1n\) 种)。

刚刚的问题其实有两种计算方法,一种是计算每种排列对应有效的几种,另一种是找到每个变换方式下和不变的情况下看上去也一样的排列数(这是因为看去来一样,本质也相同的排列应该被计数多次,更困难的例子将给出示范)。

在环排列的问题中,只有不旋转的情况下所有排列和不变的情况看上去也完全等价(用群论的说法,所有环排列都是“不旋转”这一变换方式的不动点,为了方便,后文将借用这一说法)。

于是 \(\pi_n=\frac1n\times n!\),虽然表达式一样,但含义稍有区别。这里 \(n\) 表示所有变换方式,\(n!\) 表示不旋转的变换方式下的不动点(这样没有施加任何操作的变换方式在群论中被称为恒等置换),其他情况下均没有不动点。为了组合意义更明确,可以写成 \(\pi_n=\frac1n\times(n!+\sum_{1\le k<n}0)\)。

第一种方法的复杂度显然是 \(O(n!)\),因为需要枚举所有方案数;第二种方法则只需要枚举所有变换方法,然后求解每种方法下的不动点数。

再看一个更困难的例子

用 \(3\) 种颜色给一个正五边形的顶点染色,两种方案本质相同当且仅当可以通过旋转、翻折重叠。

类比上面环排列的做法,第一步找到所有可能的变换方式(用群论中说得,叫作置换),有 \(5\) 种旋转,翻折与否。

不妨用 \(R_0,R_1,R_2,R_3,R_4\) 表示旋转次数,加 \(F\) 表示翻折,比如 \(FR_2\) 表示先旋转两次再翻折。

不难发现只有这 \(10\) 种本质不同的变换方式(这个只能枚举,但通常比直接计算答案简单得多)。

第二步,求解所有置换下的不动点数。

显然 \(R_0\) 是恒等置换,所有可能的情况都是不动点,共 \(3^5\) 个。

\(R_1,R_2,R_3,R_4\) 则必须要只用一种颜色才行,都只有 \(3\) 个不动点。

\(FR_0\) 的不动点要求左右对称,有 \(3^3\) 个不动点。

\(FR_1,FR_2,FR_3,FR_4\) 要困难一点,画个图可以知道都只有 \(3^3\) 个不动点。

所以答案是 \(\frac{1}{10}\times(3^5+3\times4+3^3+3^3\times4)=39\)。

如果颜色数为 \(k\),我们就得到更一般的公式 \(\frac{k^5+5k^3+4k}{10}\)(数论知识告诉我们这一定是一个整数,这增强了我们对该方法的信心)。

这个流程就是 \(\text{Burnside}\) 引理,更数学地写出

\[F=\frac{1}{|G|}\sum_{\sigma\in G}Z_\sigma \]

其中 \(G\) 表示所有置换构成的集合,也就是一共有多少种不同的变换方法,\(Z_\sigma\) 表示置换 \(\sigma\) 下的不动点个数。

\(\text{Burnside}\) 引理比 \(Polya\) 定理更本质,在某些情况下也更有用。

Polya 定理

虽然 \(\text{Burnside}\) 已经十分强大,但我们在判断每种置换下有多少个不动点时仍会遇到困难,这时 \(Polya\) 定理考虑了一种特殊的情况:

用 \(m\) 种颜色给 \(n\) 个点的排列染色

此时的置换可以一般化为排列之间的映射,比如上例中 \(FR_2\) 可以表示为 \([1,2,3,4,5]\to[4,3,2,1,5]\)。

我们不容易从中看出规律,因为之后我们可以知道 \(5\) 是比较特殊的。

从 \(6\) 来看更容易找到规律,以 \(R_2\) 为例,\([1,2,3,4,5,6]\to[3,4,5,6,1,2]\),可以直观地发现长为 \(2\) 的循环节,只需要每个循环节中任意染色即可。

把循环节的概念推广,任何环形的置换都可以叫做循环(这里和群论中是一样的),比如 \([1,4]\to[4,1],[2,3,5]\to[3,5,2]\) 都是循环,但 \([1,2,3]\to[2,1,3]\) 就不是一个循环,而是 \([1,2]\to[2,1],[3]\to[3]\) 两个循环组合而成的。

显然,置换全部可以写成有限个循环的组合(每个数跳到自己对应的数上,因为每个数对应的数不同且一定有数对应自己,所以每个数都属于且仅属于一个循环,所以循环数不多于数的总数)。

要做到变换之后看起来一样,只需要每个循环内相同,比如之前的例子 \([1,2,3,4,5,6]\to[3,4,5,6,1,2]\) 就有两个循环 \([1,3,5]\to[3,5,1],[2,4,6]\to[4,6,2]\),可以看到这和朴素的循环节思想是一致的。因此,假如置换 \(\sigma\) 由 \(k\) 个循环节组成,就有 \(Z_\sigma=m^k\)。

用给五边形染色的例子,\(FR_2\) 表示成 \(3\) 个循环 \([1,4]\to[4,1],[2,3]\to[3,2],[5]\to[5]\),所以有 \(3^3\) 个不动点。ss

求解出每个置换对应的循环数再带入 \(\text{Burnside}\) 引理中就有 \(\text{Polya}\) 定理

\[F=\frac{1}{|G|}\sum_{\sigma\in G}m^{|\sigma|} \]

其中 \(|\sigma|\) 表示 \(\sigma\) 的循环数。

标签:FR,排列,置换,不用,循环,群论,不动点,Polya,sigma
From: https://www.cnblogs.com/efX-bk/p/18251693

相关文章

  • 再也不用担心流量超过上限了!Windows 11中监控数据使用情况的几种方法
    序言如果你使用按流量计费的连接或担心超过数据上限,在Windows上监控你的数据使用情况可能是有益的。这允许你调整你的使用模式,以确保你有效地使用数据。方法如下。使用任务管理器密切关注数据使用情况在任务管理器中,你可以实时监控计算机上的应用程序使用的数据量。这可以帮......
  • .net8 aspire 启动不用https 报ASPIRE_ALLOW_UNSECURED_TRANSPORT故障
    故障显示System.AggregateException:“Oneormoreerrorsoccurred.(The'applicationUrl'settingmustbeanhttpsaddressunlessthe'ASPIRE_ALLOW_UNSECURED_TRANSPORT'environmentvariableissettotrue.Thisconfigurationiscommonlyset......
  • 分享不用会员免费听歌的软件,可听付费,支持随听随下!
    今天来点特别的,给你们带来几款全网免费听歌的神器,让你们的音乐之旅不再有障碍!现在,找好听的歌越来越像寻宝一样,动不动就得掏腰包。不过别担心,阿星今天就来分享几款好用的免费听歌app,电脑和手机都能用,满足你们的各种需求。提醒一下,这些神器是私人珍藏,记得自用哦,别乱传,也别用于......
  • NeMo训练llama2_7b(不用NeMo-Framework-Launcher)
    @TOC本文介绍了NeMo如何训练llama2_7b模型1.参考链接支持的模型列表功能特性LLAMA2端到端流程(基于NeMo-Framework-Launcher)2.创建容器dockerrun--gpusall--shm-size=32g-ti-eNVIDIA_VISIBLE_DEVICES=all\--privileged--net=host-v$PWD:/home\......
  • 创建属性property时,不用官方的 default 说明符;
    创建属性property时,不用官方的default说明符;首先看个案例TPerson=classpublishedpropertyAge:IntegerreadFAgewriteSetAgedefault20;end;我们创建一个TPerson类给其一个属性,然后使用了default20关键字,按照我们的理解应该是这个age属性的默认值就......
  • 群论
    引入在数学和抽象代数中,群论(GroupTheory)主要研究叫做「群」的代数结构。定义在数学中,群(group)是由一种集合以及一个二元运算所组成的,符合「群公理」的代数结构。一个群是一个集合\(G\)加上对\(G\)的二元运算。二元运算用\(\cdot\)表示,它结合了任意两个元素\(a\)和\(b......
  • 再也不用为找.NET相关的项目和框架发愁了
    思维导航前言C#/.NET/.NETCore优秀项目和框架精选C#/.NET/.NETCore项目宝库C#/.NET/.NETCore优秀项目和框架Issues前言最近经常在DotNetGuide技术社区交流群里看到有小伙伴问:有什么好用的.NET定时任务调度框架推荐的?有什么好的WPF/WinForm/Blazor图表库推荐的?.NET......
  • ref和reaction的区别(以及TS中ref,computed函数会自动推断定义其泛型(一般不用自己动手))
    其次就是了解ref,reactive的区别。ref通过对象名.value来访问对象里的值,若对象里还有属性则访问其需要:对象名.value.属性名reactive则通过:对象名.属性名,来直接访问属性值其次,两者都是响应式对象。但如果对直接对reactive对象进行赋值,那么其会丢失响应性。代码示例如下:<scri......
  • 为什么windows使用系统缓存时要使用同步阻塞IO,而linux不用?
    在Windows使用系统缓存时,默认情况下会使用同步阻塞I/O,而在Linux中则没有这种强制要求。这个差异主要归结于两个操作系统的设计哲学、文件系统架构、以及缓存管理策略的不同。Windows的设计原因历史设计选择:Windows的文件系统和I/O子系统的设计是基于较早期的操作系......
  • 推荐一个小而全的 Java 工具类库,再也不用重复造轮子,简直太优雅(带私活源码)
    上周接到老大的需求说让整理下工具类,新项目要用,本想直接拿以前的改改直接用的,结果发现以前的工具类存在很多问题,光加解密工具类就重复写了很多个。赶紧跑去找有经验的同事商量对策,最终在Github上找到Hutool这款神器。简介Hutool是一个小而全的Java工具类库,通过静态......