逆序对和置换环

1.1 逆序对交换性质

我们先假设没有哪两个数是一样的,这样比较方便。

冒泡排序的时候我们会交换一些相邻的数字,最小交换次数就是逆序对数。这是因为,相邻两个数之外的逆序对数不会改变,只有两个数本身 (i,j) 这一对的一定会发生 1 的变化。没有排好序的时候我们一定能够找到 i>j 进行交换,逆序对 1

如果我们可以交换任意两个数字,那么排序的最小次数是什么?是置换环个数。考虑对于某一个置换环,我们交换一条环边,可以让 ax=y,ay=z 变成 ay=y,ax=z,增加了一个连通块。最后要 n 个连通块,所以 n 连通块个数 = 操作次数。

交换任意两个数还有一个性质:考虑逆序对数奇偶性。对于夹在 i,j 中间的数 k,考虑 k,i,j 的四种关系,可以推出,交换 i,j 之间的位置不会使得 ik,jk 的逆序对和奇偶性变化;所以所有中间的数不会对奇偶性造成影响。只有 (i,j) 影响了。

因此序列的逆序对个数奇偶性可以看置换环个数,因为任意构造一组交换序列变成 1n 都可以,准确来说 n 连通块个数 = 逆序对数。

1.2 置换的 k 次方

考虑一个置换如果做两遍会形成什么。先把置换转换为置换环,然后观察性质。

(4235176)2=5231467

(451(4...))2=((415(4...))

(76(7...))2=(7(7...)),(6(6...))

也就是说,置换环变成了从一个点开始每次在原来的环上跳 2 得到的新环,也就是奇数长度的还是 1 个环,偶数长度的破成两个新环,其大小都是 n2

拓展到 k 也是对的。对于每一个数,跳 k 步形成新的置换环。一个长度为 t 的环会变成 gcd(k,t) 个长度为 kgcd(k,t) 的环。

posted @   OIer某罗  阅读(640)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示