关于循环排列

时间:2015-10-04 13:36:58

标签: algorithm math combinations permutation

我学习数学,我想出了这个问题。 有两个排列A和B以及一个整数M. 如果我们可以从A到B进行以下操作,我们说A几乎等于B. -1选择排列A的M长度段。
-2向右执行循环移位(因此,如果子段为“1 2 3 4 5”(m = 5),则此操作后将为“5 1 2 3 4”。)< / p>

问题:A几乎等于B?

我认为这很典型,但我找不到答案。 如何解决?(不是蛮力!)

排列中的元素数量&lt; = 10 ^ 5

例如

A“1 2 3”
B“2 3 1”
m = 2的
回答是
解释“1 2 3” - &gt;“2 1 3” - &gt;“2 3 1”

1 个答案:

答案 0 :(得分:1)

这是我猜想的证明。让m为排列的长度,1 ≤ m ≤ n为允许我们旋转的窗口的长度,P。如果存在一系列将Q转换为P的窗口旋转,则排列Q(1) m = 1: P almost equals Q if and only if P = Q (2) m = n: P almost equals Q if and only if they're rotations of each other (3) 1 < m < n, m odd: P almost equals Q if and only if they have the same parity (4) 1 < m < n, n even: P almost equals Q 几乎相等。几乎平等是一种等价关系。这是声称的等价类的特征。

(3)

前两项说法很明显。对于n = m + 1 ≥ 4,奇偶校验条件的必要性源于旋转奇数长度的窗口是偶数置换的事实。

这里论证的主要内容是找到P的算法,因为一般来说,我们可以使用类似于插入排序的算法来转换m + 1,以便除了最后一个{{1} 1}}元素匹配Q,具体而言,案例(n, m) = (3, 2)可以通过检查来解决。如果m是偶数,我们会通过在必要时旋转最后一个Q元素来进一步确保转换与m的奇偶校验匹配。 (对于m奇数,我们只假设平等。)

我们需要一种技术,一次移动少于m个元素。假设状态如下。

1, 2, 3, 4, ..., m, m + 1

旋转第二个窗口m - 1次(即反转一次)。

1, 3, 4, ..., m, m + 1, 2

旋转第一个窗口m - 1次。

3, 4, ..., m, m + 1, 1, 2

第二,两次。

3, 2, 4, ..., m, m + 1, 1
3, 1, 2, 4, ..., m, m + 1

我们成功地旋转了前三个元素。这足以结合通过旋转的共轭来“{插入排序”m - 1 Q元素到位。其他两个是通过奇偶校验匹配的正确顺序。