置换和轮换(续:对其幂的讨论)

2023-10-29 00:20
文章标签 讨论 置换 轮换

本文主要是介绍置换和轮换(续:对其幂的讨论),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

参考论文:置换群快速幂运算的研究与探讨

之前我们介绍过置换和轮换的基本知识以及Burnside引理
Burnside引理:等价类数目为所有置换不动点的平均值
置换的不动点: 颜 色 数 轮 换 个 数

这里我们要深入研究一下把轮换的运算

例子引出一般结论

我们先给出一个置换群中的结论:

e e 为单位置换(长度为1的置换), T为一轮换(或称循环)
Tk=e T k = e ,那么k的最小整数解就是 T T 的长度

为什么会这样呢?
我们先来看几个例子:

这里写图片描述

此例子中T的长度为6,k=2,结果就分裂成了两个长度相等的轮换

那我们看一下k=3的情况:

这里写图片描述

这样T就分裂成了3个轮换

k=4呢?

这里写图片描述

嗯?为什么得到的答案和k=2时一样呢?

继续:k=5

这里写图片描述

这次并没有发生分裂

这有什么规律呢?—>gcd(LT,k)

从中我们可以得到三个结论:

结论一

一个长度为 L L 的轮换T L L k的倍数,则 Tk T k k k 个轮换的乘积,每个轮换分别是循环T中下标 i(mod)k=0,1,2 i ( m o d ) k = 0 , 1 , 2 … 的元素按顺序的连接

结论二

一个长度为 L L 的轮换T gcd(L,k)=1 g c d ( L , k ) = 1 ,则 Tk T k 是一个轮换,与轮换 T T 不一定相同

结论三

一个长度为L的轮换 T T Tk就是 gcd(L,k) g c d ( L , k ) 个轮换的乘积,每个轮换分别是轮换 T T 中下标i(mod)gcd(L,k)=0,1,2的元素的连接

回到最初我们给出的结论:

Tk=e T k = e ,那么k的最小整数解就是 T T 的长度

这个就非常好理解了:gcd(LT,LT)=LT

当L与k互质时

之前我们得到了一些长度与k之间的结论
其中,当 gcd(L,k)!=1 g c d ( L , k ) ! = 1 时,我们是可以直接构造出结果轮换
下面我们就讨论一下 L L k互质时的结果轮换

举个例子:
这里写图片描述

继续:

这里写图片描述

我们可以发现,把 (mod)k=1,2,...,k1,0 ( m o d ) k = 1 , 2 , . . . , k − 1 , 0 的项提出来,连接起来则是所求新轮换

定理

a=T,a=Tk a = T , a ′ = T k ,且 gcd(LT,k)=1 g c d ( L T , k ) = 1 ,则 a[i]=a[(k+1)i(mod)LT] a ′ [ i ] = a [ ( k + 1 ) ∗ i ( m o d ) L T ]

我们用图直观理解一下:
L=10,k=3 L = 10 , k = 3

这里写图片描述

这是一个很有用的结论,我们把ta转化成code:

for 原置换中的每一个轮换for 环中每一个未标记元素{做标记放入结果数组前进k步until 回到此元素将结果数组中的元素取出,得到的环就是目标置换包含的一个轮换}

这个算法总结了上述三个结论和一个定理

置换的分数幂(开方)

之前我们讨论了轮换的乘方运算
下面我们就讨论开方运算:

轮换长度与指数互质:

有之前的定理可以得到,开方运算是乘方的逆:
由目标轮换构造原轮换:每次原函数指针后移 k k 位,目标函数指针依次后移

轮换长度与指数不互质:

这种情况是无法开方的:

  • 结果置换只包含一个轮换:
    假设我们由一个初始轮换T,开k次方,得到一个目标轮换 t t
    由一开始得到结论可知:tk=T,gcd(Lt,k)!=1
    按理说得到的 T T ′ 应该包含 gcd(Lt,k) g c d ( L t , k ) 个轮换,与题设不符
    因此不可开方

    • 结果置换包含若干轮换
      结果置换的 k k 次幂只有可能把自己包含的轮换分裂,不可能合并成一个大轮换

    因此,轮换长度与指数不互质时,单个轮换不能看房

    多个轮换的分数幂

    当轮换的长度与指数不互质时,会分裂成gcd(L,k)个轮换
    那么如果我们可以把这些轮换合并起来就可以得到初始轮换了

    k=2 k = 2
    这里写图片描述

    上图体现了两种开方方式:
    上图是把两个轮换交错结合
    下图是:结果轮换 Tk T k 的指针 i i 依次后移,而需要构造的轮换的指针j依次后移 k k 位,T[j]=Tk[i]

    那么我们要开 k k 次方,需要将k个长度相等的轮换合并吗
    实际上并不需要:
    如果我们选择m个轮换进行合并,得到的大轮换长度为 Lm L ∗ m
    如果 gcd(Lm,k)=m g c d ( L ∗ m , k ) = m ,就可以保证次方法正确
    显然,m是k的一个约数,并且 gcd(L,k/m)=1 g c d ( L , k / m ) = 1
    这个式子的充要条件是: m m gcd(L,k)的倍数
    因此: min(m)=gcd(L,k) m i n ( m ) = g c d ( L , k )

    我们可以将上面两种情况并在一起:

    • m=gcd(L,k) m = g c d ( L , k )
    • 选择n*m份长度为1的轮换交错合并,n为整数,且 gcd(nm,k/m)=1 g c d ( n ∗ m , k / m ) = 1
    • 将大轮换开 k/m k / m 次方
    将原置换中的轮换按照size排序
    for 每一个轮换m=gcd(l,k)if 有m个相同长度的轮换将m个轮换交错的输出到目标数组,保存为一个轮换将得到的大轮换开k/m次方else 无解

这篇关于置换和轮换(续:对其幂的讨论)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/296978

相关文章

MySQL中闪回功能的方案讨论及实现

《MySQL中闪回功能的方案讨论及实现》Oracle有一个闪回(flashback)功能,能够用户恢复误操作的数据,这篇文章主要来和大家讨论一下MySQL中支持闪回功能的方案,有需要的可以了解下... 目录1、 闪回的目标2、 无米无炊一3、 无米无炊二4、 演示5、小结oracle有一个闪回(flashb

聊聊分布式,再讨论分布式解决方案

前言 最近很久没有写博客了,一方面是因为公司事情最近比较忙,另外一方面是因为在进行 CAP 的下一阶段的开发工作,不过目前已经告一段落了。 接下来还是开始我们今天的话题,说说分布式事务,或者说是我眼中的分布式事务,因为每个人可能对其的理解都不一样。 分布式事务是企业集成中的一个技术难点,也是每一个分布式系统架构中都会涉及到的一个东西,特别是在微服务架构中,几乎可以说是无法避免,本文就分布式事

如何利用ChatGPT提升学术论文讨论部分的撰写质量和效率

大家好,感谢关注。我是七哥,一个在高校里不务正业,折腾学术科研AI实操的学术人。关于使用ChatGPT等AI学术科研的相关问题可以和作者七哥(yida985)交流,多多交流,相互成就,共同进步,为大家带来最酷最有效的智能AI学术科研写作攻略。经过数月爆肝,终于完成学术AI使用教程,估计也有个50万字的详细操作指南。跟着一步一步操作,借助ChatGPT做学术、干科研、写论文、课题申报都变得超简单。欢

图形API学习工程(12):讨论当前工程里同步CPU与GPU的方式

工程GIT地址:https://gitee.com/yaksue/yaksue-graphics 简单讨论CPU和GPU间的交互 《DX12龙书》在【4.2 CPU与GPU间的交互】章节中讨论了这个问题,简单来说: 为了最佳性能,CPU和GPU这两种处理器应该尽量同时工作,少“同步”。因为“同步”意味着一种处理器以空闲状态等待另一种处理器,即它破坏了“并行”。 但有时,又不得不进行二者的同步

讨论“get”和“post”安全性

get”安全,还是“post”安全?这或许是大家总结两者必须要分析的内容,因为这涉及到我们将内容从浏览器传送到服务器的安全性,选择不当将会带来巨大的不安全因素,从而可能带来巨大的损失。这篇博客,我将阐述一下,当然更多的还是希望各位大神发表一下见解,讨论一下下!             首先,我们来看一下两者最基本的区别: GET请求通过URL(请求行)提交数据,在URL中可以看

Android 疑难问题讨论及面试题

https://github.com/android-cn/android-discuss/issues?page=1&q=is%3Aissue+is%3Aopen

页面置换算 - FIFO、LFU、LRU

缓存算法(页面置换算法)-FIFO、LFU、LRU   在前一篇文章中通过leetcode的一道题目了解了LRU算法的具体设计思路,下面继续来探讨一下另外两种常见的Cache算法:FIFO、LFU 1.FIFO算法   FIFO(First in First out),先进先出。其实在操作系统的设计理念中很多地方都利用到了先进先出的思想,比如作业调度(先来先服务),为什么这个原则在很多地方都会

讨论运维监控工具的普及程度

在讨论运维监控工具的普及程度时,加入PIGOSS BSM产品的分析是非常有意义的,因为PIGOSS BSM是一款在中国市场具有一定影响力的运维监控工具。 PIGOSS BSM运维监控工具是一款综合性的IT运维监控解决方案,它能够对多层次的IT资源进行监测,包括但不限于性能监测、事件管理、报表管理等功能模块。PIGOSS BSM的一个独特之处在于其拓扑关联配置工具,这使得用户可以根据自身的I

8种进行简单线性回归的方法分析与讨论

以下是八种进行简单线性回归的方法及其分析与讨论: 二乘法(OLS): 分析:通过化预测值与实际值之间的平方误差来估计回归系数。 讨论:简单直观,适用于大多数线性回归问题。但对于数据中存在异常值或噪声时,可能不够鲁棒。 梯度下降法: 分析:通过迭代优化算法调整回归系数,以化损失函数。 讨论:适用于大规模数据集和复杂模型,但需要选择合适的学习率,并可能需要较长的训练时间。 正规方程法:

在Spring框架中,如何实现依赖注入?请列举几种注入方式。请解释Spring Boot的自动配置特性,并讨论其如何简化Web应用开发。

在Spring框架中,如何实现依赖注入?请列举几种注入方式。 在Spring框架中,依赖注入(Dependency Injection,简称DI)是一种实现控制反转(IoC,Inversion of Control)的技术。依赖注入允许对象在创建时不直接依赖于它们的依赖项,而是在运行时由外部实体(如Spring容器)将这些依赖项注入到对象中。这有助于减少代码间的耦合,提高模块的可重用性和可测试性