逆序对和置换环

1.1 逆序对交换性质

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

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

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

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

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

1.2 置换的 \(k\) 次方

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

\[(4235176)^2 = 5231467 \]

\[(4-5-1(-4...))^2 = ((4-1-5(-4...)) \]

\[(7-6(-7...))^2 = (7(-7...)), (6(-6...)) \]

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

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

posted @ 2023-03-27 20:22  OIer某罗  阅读(439)  评论(0编辑  收藏  举报