Mathematica中的Riffling卡片

fri*_*itz 4 algorithm wolfram-mathematica

我的朋友向我提出这个问题; 感觉就像在这里分享一样.

鉴于一副牌,我们将它分成两组,并"交错"; 让我们将此操作称为"拆分连接".并在最终的套牌上重复相同的操作.

例如,{1,2,3,4}变为{1,2}&{3,4} (分裂),我们得到{1,3,2,4} (加入)

此外,如果我们有奇数卡,即{1,2,3},我们可以将其分为{1,2}{3}(大半号优先),导致{1,3,2} (即,n分为Ceil[n/2]&n-Ceil[n/2])

她问我的问题是:

为了让原来的甲板回来,需要多少这样的分裂连接?

这让我感到疑惑:

如果牌组有n张牌,那么在以下情况下所需的分割连接数是多少:

  • 甚么?
  • n很奇怪?
  • n是'2'的幂?[我发现我们需要log(n)(base 2)数量的拆分连接...]
  • (随意探索这样的不同场景.)

是否存在关联n和所需拆分连接数的简单模式/公式/概念?

我相信,在Mathematica中探索这是一件好事,特别是因为它提供了Riffle[]方法.

NPE*_*NPE 14

引用MathWorld:

出的混洗到n = 2,4的甲板,...返回到其原来的顺序所需要的数字是1,2,4,3,6,10,12,4,8,18,6,11, ......(Sloane的A002326),它只是2的乘法次序(mod n-1).例如,52张一副扑克牌因此被返回到其原始状态后八段-洗牌,由于2**8 = 1(MOD 51)(哥伦布1961).的需要1,2,3,...出混洗以返回到甲板的原始状态卡2n个最小号是1,2,4,3,16,5,64,9,37,6,.. (斯隆的A114894).

的情况下n为奇数没有解决.

请注意,该文章还包括一个Mathematica笔记本,其中包含探索out-shuffle的功能.


Hei*_*ike 5

如果我们有奇数卡n==2m-1,并且如果我们拆分卡片,那么在每次洗牌期间,第一组包含m卡片,第二组m-1卡片,并且组合在一起,使得同一组中的两张卡片最终不会相邻另外,那么所需的洗牌次数等于MultiplicativeOrder[2, n].

为了证明这一点,我们注意到,一个洗牌这是在位置上的卡后,k已经转移到位置2k0<=k<m,并2k-2m+1m<=k<2m-1,其中k是这样的0<=k<2m-1.书面模数n==2m-1这意味着新职位Mod[2k, n]适合所有人0<=k<n.因此,对于每个卡恢复到原来的位置,我们需要N洗牌,其中N是这样的,Mod[2^N k, n]==Mod[k, n]对于所有0<=k<n从它遵循N的任何倍数MultiplicativeOrder[2, n].

请注意,由于对称性,如果我们以相反的方式拆分牌组,结果将完全相同,即第一组总是包含m-1牌和第二组m牌.我不知道如果你交替会发生什么,即对于奇怪的洗牌,第一组包含m牌,甚至是随机m-1牌.