我学习数学,我想出了这个问题。
有两个排列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”
答案 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
元素到位。其他两个是通过奇偶校验匹配的正确顺序。