我需要重复多少次特定的扑克牌洗牌才能回到我开始的地方?

How many times do I have to repeat a specific shuffle of playing cards to get back to where I started?

这是我在 Stack Overflow 上的第一个 post,所以如果我做错了什么,请原谅我的错误。


好的,所以我正在尝试找到一个 algorithm/function/something 来计算我必须对 52 张扑克牌进行相同类型的洗牌多少次才能回到我开始的地方。

我使用的具体随机播放是这样的:
-您将有两堆。
-你的牌组背面朝上。 (让我们称这堆 1)
-您现在可以交替将一张牌放在第一堆的后面 示例:假设您在一堆中有 4 张牌,背面朝上,从最靠近地面的 4 张到 1 张最接近天空(它们的顺序是 4、3、2、1。你拿卡片 1 并将它放在卡片 4 的下面意味着卡片 1 现在离地面最近,卡片 4 第二近,顺序现在是 1、4、3 ,2. 并将一张放入第 2 堆。
-第 2 堆将 "stack downwards" 意味着您将始终将新卡放在该堆的底部。(背面始终朝上)
-第一张牌总是放在第一堆的后面。
-重复此过程,直到所有卡片都在第 2 堆中。
-现在拿起第 2 堆,做与刚才完全相同的事情。

我的问题是:我必须重复这个过程多少次才能回到开始的地方?


旁注:
- 如果这是一种常见的洗牌方式并且已经有解决方案,请告诉我。
- 我对数学和编码还是个新手,所以如果为此写一个 equation/algorithm/code 真的很容易,请不要笑我;<。
- 对不起,如果我问错地方了,我不知道这一切是如何运作的。
- 英语不是我的主要语言,我也不是母语所以请原谅任何错误的语法 and/or 其他语法错误。

不过,我确实有一个代码可以完成所有这些操作 (Link here),但我不确定这是否是最有效的方法,而且它还没有给出结果,所以我不知道甚至不知道它是否有效。如果您不想就如何更改它提供提示或建议,请提供,我将不胜感激。这是从头开始完成的,但是因为我不会用任何其他语言编写...抱歉...

提前致谢。

任何固定的洗牌都相当于 permutation; what you want to know is the order of that permutation. This can be computed by decomposing the permutation into cycles and then computing the least common multiple 个循环长度。


我无法正确理解您的算法,但这里有一个洗牌 8 个元素的示例,然后计算需要重复洗牌的次数才能恢复到未洗牌状态。

假设序列从1,2,3,4,5,6,7,8开始,经过一次洗牌后是3,1,4,5,2,8,7,6。

  • 数字1到位置2,然后2到位置5,然后5到位置4,然后4到位置3,然后3到位置1。所以第一个循环是(1 2 5 4 3).
  • 数字6走到8位,然后8走到6位,所以下一个循环就是(6 8)。
  • 数字7留在位置7,所以这是一个平凡的循环(7)。

循环的长度是5、2和1,所以最小公倍数是10。这个洗牌需要10次迭代才能回到初始状态。


如果您不介意坐下来用笔和纸坐一会儿,您应该可以按照此过程来构建您自己的洗牌算法。