关于洗牌的研究(六)——从数学到魔术之完美洗牌

2019-09-27 14:46:59 浏览数 (2)

写再前面:本系列作品由MathMagician独家首发,一共有七篇,从数学和魔术两个角度对日常生活中“洗牌”这一现象作了挂一漏万的分析。之所以说是挂一漏万,是因为无论数学还是魔术,洗牌中的任何一个小点都够写几篇了。所以,本系列主要选取了一些常见的洗牌方式和相关内容展开作了一些介绍,包括洗牌分类,混乱度评价,过程建模,近似计算,以及几个基本但是及其巧妙的利用洗牌规律设计的魔术。相信聪明的你读完以后,会在数学和魔术上,都对“洗牌”这一现象有着更加深入的认识。

历史文章请戳:

关于洗牌的研究(五)——从数学到魔术之印度洗牌

关于洗牌的研究(四)——洗牌混乱度计算

关于洗牌的研究(三)——洗牌过程建模

关于洗牌的研究(二)——你的扑克洗乱了吗?

关于洗牌的研究(一)——平常你都是怎么洗牌的?

本篇是第六篇:从数学到魔术之完美洗牌

到这一篇,我们来看看完美洗牌这一效果,在完美精确的特性下,能发挥出怎样的魔力。

回顾一下完美洗牌的过程,它是一种特殊的交叉洗牌,有Out Faro Shuffle和In Faro Shuffle两种,对于每张牌的位置变化,首先考察其是否在前半叠,不在则减去牌叠一半数量。剩下的操作要么就是乘以2,或者再加1。

重点来了。

这个操作在二进制的世界里十分完美,这恰好是个左移位操作,只是移入的数据是0和1的区别,取决于out/in faro还是在不在上半叠,其中out faro和上半叠牌相当于左移1位补0,改变成in faro或下半叠则补1,二者都改则仍然补0:

k << 1 1 if in faro xor k >= N /2

k << 1 if not (in faro xor k >= N/ 2)

天哪,扑克牌上的完美洗牌居然对应计算机的移位操作,而在二进制的计算机底层,有大量移位操作的优化来加速运算,这一切竟然正好和一个扑克魔术手法对应!

还有一点,这里关于移位进入的数是1还是0的逻辑,其实是一个类似于Z2群的数学结构,或者也可以用亦或(xor)和同或(exor)这样的逻辑运算来直接表达,甚至直接当成一个不进位的加法来理解。

另外,这里牌的计数顺序(从顶部往底部数还是反过来)不影响是否是一个out/in faro,可见计数顺序仅仅是对完美洗牌性质的一种描述,并不影响其本身。

那这些特性里有哪些可以用于魔术呢?

1. 完美洗牌仅仅是一次固定的排列变换流程而已,它在观众眼里可以是一次不完美的正常洗牌,这个差别就是产生魔术效果的点。但这样一次精密的移动能设计的效果其实是非常数学化而且难以表演的。必须加以转化。

2. 多次完整的完美洗牌有一定的手法困难,但是做到魔术效果并不要求每次都绝对完美,只要能完成魔术效果即可,比如只要一个局部等(之前reverse操作也有变种,只需要顶牌恢复就可以了)。

3. 完美洗牌对扑克牌位置的改变方式是计算机上的移位操作,这是极其数学化的,为设计魔术带来了机会又有挑战。但是这给把任意扑克牌移动到任意位置都提供了可能,所以又是极富想象空间的。

4. 上述移位操作是批量进行的,所以没超过半幅位置的牌若干次洗牌以后都会得到同余的性质,余数取决于in / out faro的具体实施顺序,这样一来,就可以用同余性质做些文章了。

这些特性都是理论上的,要真的变成魔术还不那么容易,经过和朋友们的讨论和自己思考,筛选,以下作品供大家欣赏。

完美三明治

一开始真的为这太数学化的操作改编成魔术而头疼,不过感谢一位魔术朋友给我提供的点子,让我眼前一亮,加以练习以后完成了第一个完美洗牌的作品。

视频1 完美三明治

这个作品没有过渡依赖完美洗牌的效果,用上了加减恒等关系使得精密的数学关系在自由选择下生效,而完美洗牌只不过把这一效果以三明治的魔术形式展现出来罢了。这是我目前看到完美洗牌相关魔术里,比较适合表演的一个了。综合表演难度和惊喜程度,这是一个相当不错的结合了数学和魔术相互优势的作品了。

如果做不到绝对完美,这里也只需要保证在靠近底或者顶部的前若干张保持完美就好了,这也取决于观众停牌的多少(不能超过26张)是分叠一定要检查完全相同,这是效果成立的基础。

数学原理剖析如下:

(嫌烦的可以跳过啦,在前文《加加减减的奥秘——从数学到魔术的思考(一)》系列文章中,早就介绍过相关原理了,这里大同小异。)

对于一副2n张的扑克牌,编号0~(2n - 1)其中鬼牌定位于(n - 1)和(n - 2)张位置,发牌m张使得位置到(n - m - 1)和(n - m - 2),那么当选牌位于底部(2n - 1)张时候,也变成了(2n - m - 1),注意m <= n - 2,这样不会改变一对鬼牌和选牌所在牌叠一上一下,此时,在in faro下恰好鬼牌位置变为{2(n - m - 1) 1,2(n - m - 2) 1} = {2(n - m) - 1, 2(n - m) - 3}选牌变成了2(2n - m- 1 - n) = 2(n - m) - 2,这恰好位于两个鬼牌之间构成sandwich效果。

感谢朋友给我提到的这个好点子。交流创造价值。

当然,由于完美洗牌的交叉特性,完全可以把该流程扩展成一个Collector流程,这个就留给同学们自己设计了,我相信效果一定能比这个还爆炸!

洗牌把格拉斯效果

江湖上传闻的巴格拉斯效果有各种各样的变种,利用完美洗牌这么硬核的方法做到实在是不容易,这个想法很早在英国女王学院提出完美洗牌的二进制效应以后就自然产生了,无奈流程太过繁琐,而且极其容易失误,所以绞尽脑汁,完整的作品才在近日想到来分享给大家。

视频2 洗牌巴格拉斯效果

巴格拉斯是每个魔术朋友梦寐以求的效果,但是完美的效果总是遥不可及,我尝试着把完美洗牌在移动牌上的规律利用好,尽量做到最佳效果。

我们要做的事情是,通过移位操作,把指定的牌移动到指定的位置。指定的牌可以很容易通过手法控制在顶部底部(0位置),接下来的设计就极其精妙了。

按道理,将位置为0的首牌移动到指定0~53的位置可能需要6次洗牌,因为只要不小于32,就是一个6位的二进制数。这对于魔术表演来说显然太多了,是一个理论可行但是表演会很糟糕的流程。于是,我进行了两方面的关键改造:

1. 位置为0~26从顶部开始洗,位置为27~53从底部开始洗,用53减去以后有恢复了0~26的范围,这样最多是一个5位二进制数。通过数牌怎么都合理的方向,减少了一次洗牌(记得Kiko在讲座中提到过,最好正面向上给观众数,这样翻过来数就很合理了,而不翻同样也合理,翻过来则很糟糕,真是觉得每个细节都是戏啊!)。

2. 我们是通过二进制移位操作达成这个值的,所以值的变化是成倍的,位置大范围的变化在最后两次,因此最开始的0~7的前三比特完全可以直接用手法数过去,控顶或者控底以后补对应张数即可,这样只剩下最后的2个比特位了,仅需要两次完美洗牌即可做到!

当然,如果转化后的数比16还小那就可以进一步减少完美洗牌次数,减少失误了。另外,这里也并不要求真的完美切分和交叉,只要到控制那一张为止不错,达到正确加倍加一的效果就够了,所以一般从那边数,完美洗牌就从哪边开始,这样后面是允许误差存在的。

而表演上,它在观众说完数字以后需要动扑克牌,这是一个说不清的天然劣势,需要用巧妙的语言让切牌,洗牌变得合理,最后的结果才看起来神奇,要靠魔术师的功力去引导了。

这绝对是一个硬核魔术,表演得当将产生完全超现实的效果。

后来,朋友还提到过利用前6张的选择加3次out faro shuffle把选牌控制在整除位置来知晓观众的牌,但也免不了要多次询问,尚且不如一些魔术手法来得干脆,这里就暂时没有表演了,同学们可以想想这个原理可以怎么设计更好。

到此,我能想到完美洗牌相关的魔术设计就这些了,你如果有新的想法,欢迎留言交流。

0 人点赞