逆序对和置换环
1.1 逆序对交换性质
我们先假设没有哪两个数是一样的,这样比较方便。
冒泡排序的时候我们会交换一些相邻的数字,最小交换次数就是逆序对数。这是因为,相邻两个数之外的逆序对数不会改变,只有两个数本身 这一对的一定会发生 的变化。没有排好序的时候我们一定能够找到 进行交换,逆序对 。
如果我们可以交换任意两个数字,那么排序的最小次数是什么?是置换环个数。考虑对于某一个置换环,我们交换一条环边,可以让 变成 ,增加了一个连通块。最后要 个连通块,所以 连通块个数 操作次数。
交换任意两个数还有一个性质:考虑逆序对数奇偶性。对于夹在 中间的数 ,考虑 的四种关系,可以推出,交换 之间的位置不会使得 的逆序对和奇偶性变化;所以所有中间的数不会对奇偶性造成影响。只有 影响了。
因此序列的逆序对个数奇偶性可以看置换环个数,因为任意构造一组交换序列变成 都可以,准确来说 连通块个数 逆序对数。
1.2 置换的 次方
考虑一个置换如果做两遍会形成什么。先把置换转换为置换环,然后观察性质。
也就是说,置换环变成了从一个点开始每次在原来的环上跳 得到的新环,也就是奇数长度的还是 个环,偶数长度的破成两个新环,其大小都是 。
拓展到 也是对的。对于每一个数,跳 步形成新的置换环。一个长度为 的环会变成 个长度为 的环。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现