【问题标题】:About Cyclic Permutation关于循环排列
【发布时间】:2015-10-04 13:36:58
【问题描述】:

我学过数学,我想出了这个问题。 有两个排列 A 和 B 以及一个整数 M。 如果我们可以从 A 到 B 进行以下操作,我们说 A 几乎等于 B。
-1 选择排列 A 的 M 长度段。
-2 向右循环移位。(所以,如果子段是“1 2 3 4 5”(m=5),那么在这个操作之后,它将是“5 1 2 3 4”。)

问题:A几乎等于B吗?

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

排列中的元素数

例子

一个“1 2 3”
B“2 3 1”
m=2
回答 是
解释一下:“1 2 3”->“2 1 3”->“2 3 1”

【问题讨论】:

  • 猜想:如果排列的长度为m,则检查它们是否相互旋转。否则,如果 m 是奇数,则检查它们是否具有相同的奇偶性。如果 m 是偶数且小于排列长度,则它们总是几乎相等。

标签: algorithm math combinations permutation


【解决方案1】:

这是我猜想的证明。让n 是排列的长度,m 是允许我们旋转的窗口的长度,其中1 ≤ m ≤ n。如果存在将P 转换为Q 的窗口旋转序列,则排列PQ几乎相等。几乎相等是等价关系。这是等价类的声称特征。

(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元素之外的所有元素都匹配@ 987654333@,具体来说(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

我们已成功旋转前三个元素。这足以与通过旋转共轭“插入排序”Q 的第一个 m - 1 元素到位。其他两个按照奇偶匹配的顺序排列。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-28
    • 2021-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-07
    相关资源
    最近更新 更多