完美洗牌的秘密(五)——完美洗牌的性质和变体

news2024/11/14 13:41:11

‍早点关注我,精彩不错过!

之前4篇文章,我们介绍清楚了完美洗牌的3对基本定理。今天,我们来看在这一般的描述基础上,还有哪些常见性质和变体值得探讨。

所谓操作的性质,在扑克牌数学魔术的语境下,指的就是什么样的性质,在这个操作下能过获得保持或者转换。转换部分其实就是(反)完美洗牌定理中从各个不同角度(单张绝对位置、总体周期、相对位置)为基础的剖析,是对变化的基本描述的抽象总结;而保持的则更加隐蔽,在变化中直接看不出来,还要结合性质描述本身来看。今天我们就介绍一个最经典的完美洗牌操作的不变性。

完美洗牌和stay stack

由完美洗牌第三定理,我们还可以很容易得到完美洗牌关于stay stack镜像(for 牌叠索引a, b,若a + b = 2N - 1, 有{a, b}构成某个满足特定属性的集合)的一个性质:完美洗牌对于偶数张的stay stack镜像性质保持,对于奇数张的情况则是以其初始对称轴为中心来保持的。甚至偶数张时,它们都不必是完全交错的faro shuffle,只要两叠张数相等,部分faro也可以,称为局部完美洗牌。证明如下:

偶数张2N的情况:

假设原来处在镜像位置的两张牌的索引分别为A,B,有:

A + B = 2N - 1

不妨设A < B,那么对于标准的一次out faro shuffle,其新位置为:

A' = 2A

B' = 2N - 1 - 2(2N - 1 - B) = 2B - (2N - 1)

于是,A' + B' = 2(A + B) - (2N - 1) = 2N - 1仍然成立,两个新位置仍然处于镜像上。相当于索引上以a + b = 2N - 1为性质构建的集合划分结果,在这个排列变换下的新牌叠索引对应值性质不变(始终是索引的性质,初始时是原排列,值和索引相同,后续则是新排列结果上的原索引代表的值的性质,如果值上还有性质,可以再复合)。

in faro的情况可以类似说明。不过,我们可以把in faro看作是顶部底部各多一张牌时的out faro洗牌后把两张再拿掉的情况,因为顶底拿掉不改变镜像性质,因此成立。

我们可以用同样的思路来说明非完全的局部faro shuffle为什么能保持性质,因为那直接等效于去掉没有进行faro shuffle的那部分牌叠的faro shuffle再于顶底处各自补上相同张数的牌。补上的牌有镜像性质,而补的过程也不破坏本身faro洗牌后的镜像保持,因此成立。

奇数张2N - 1的情况:

而当张数为奇数张2N - 1的时候,我们直接根据完美洗牌第三定理,考察原本关于中心牌(位置为C)对称的两张牌A,B,满足:

A + B = 2C

A - C = C - B

经过一次完美洗牌以后,A,B和C之间的距离都会变成mod意义下的两倍,有:

A' - C' == 2(A - C)(mod 2N - 1)

C' - B' == 2(C - B)(mod 2N - 1)

于是,A' - C' == C' - B'(mod 2N - 1)

于是两张牌新的位置仍然关于新的对称中心C'的位置对称。注意这里不同的是,所有镜像对称牌的对称轴也由C转为C'。而C也转移到C'的位置,因此相当于有一个一直可以参照的移动对称轴存在。

所以对不完全的faro shuffle的stay stack的性质保持,这里就不能同偶数的情况等效了。因为偶数张时,对应牌只能关于固定的中心轴对称,而奇数张的faro shuffle以后,对称轴早就不知道去哪里了。

后来才知道,原来faro shuffle在奇数张时候还专门有个名字,叫做straddle faro shuffle,一般是指的in faro的情况,out faro可以对称地看作是从另一侧开始的straddle faro shuffle了。这些其实完全不影响仍然用faro shuffle中的in和out来命名。不过从名字看,就能看出straddle faro的洗牌是会呈现一个左右对称的结构,这也是这个洗牌的重要特征,in和out之间只差一个reverse而已,甚至只差一个看待它的视角。

正因为奇数张的时候有实体的一张牌作为对称中心来参照,反而它可以对称不变地在中间进行切牌操作而不破坏相对镜像性质,因为切牌是距离不变的。相反这些操作都会破坏偶数张固定中心的stay stack的性质,反而使得奇数时候的情况变得更加灵活了。虽然奇数不能做那种看起来很奇怪的不完全faro shuffle了,可那本来就是个很奇怪的非正常洗牌方式,有什么舍不得的呢?而因为奇数有比偶数更独特的关于距离的性质,反而有了更广泛的应用,后面还可以看到它其实是peirce count的一个最特殊的形式!

(Anti)Faro Shuffle的操作变体

稍微补充一点。faro洗牌一般被视作没有一定扑克魔术手法基础的人做不了的操作,不过这些都可以用具有相对性质的anti faro shuffle替代。常见的就是依次发牌发成两叠的操作,如果补上翻转,那这就是一次标准的anti faro shuffle。如果没有,那就相当于在faro shuffle的基础上再复合了一次全局的reverse操作。有时这个发出来的两叠不一定在桌子上,可以直接在手上in jog和out jog就完成了。不过对于这种依次发n叠的操作,我们在讲周期性规律的时候就聊过了,因此还算熟悉,本质是把mod值相同的牌发到一叠,因此还可以扩展到3叠,4叠等更多的情况。不过,这就真的只能发牌了,洗不了。

当然,faro shuffle本身也可以有变体。你把牌直接分成两叠,然后依次发到一叠上,那也等效为一次faro shuffle了,同样的如果没有翻转的话等效于还要复合一次reverse。这也可以扩展到n叠的情况,只是比anti的发n叠看起来的收n叠更是一个不太常见的操作了。

milk shuffle和monge shuffle

这里还有一个faro shuffle可能大家都意想不到的变体,那就是milk shuffle。看起来是个很奇怪的操作,但它竟然是把其中一个半叠进行reverse以后再进行faro shuffle的等效操作!那么它的逆操作monge shuffle,自然也是同样的 anti faro shuffle以后再进行半叠的reverse操作!看起来毫无关联的两种洗牌方法竟然在二进制的框架下完美地组合在了一起,据此可以观察到milk shuffle本质上竟然是Gilbreath shuffle在faro shuffle情况下的特例,因此有时候会具有极佳的性质来变成魔术。

我们可以简单推导一下milk shuffle的每张牌位置的变化规律,其实用函数复合的思想就很好解决了:

milk shuffle定理:

设牌叠序列为D,长度为l,有:

当l = 2n为偶数,

MilkShuffle(D) = OutFaroShuffle(Reverse(D[:n]) + D[n:])

当l = 2n - 1为奇数,

MilkShuffle(D) = InFaroShuffle(Reverse(D[:(n - 1)]) + D[(n - 1):])

其实还有个更简单的可以不用区分奇偶性的统一公式,那就是我们直接以牌底为开始索引来计算,那么:

MilkShuffle(D) = OutFaroShuffle(D[:[(I + 1) / 2]] + Reverse(D[[(I + 1) / 2]:]))

而这个式子显然更加简洁明了,可见转换一下观察角度,对象的描述会变得多么简单愉快。

当然,硬是要去做一个另一种Faro Shuffle和Reverse半叠的操作也不是不行,只是操作起来就没有milk shuffle这样如丝般顺滑了,失去了实际操作中的便捷和特殊性。

而milk shuffle的逆操作,monge shuffle也是一个看起来很舒服的操作。注意完成时如果是奇数张第2张应该放上侧,否则下侧,因为奇数张的milk最后一张本就是多余没有,因此单列出来后才开始一上一下地恢复。而且和milk shuffle一样,并不需要刻意去考虑到底对奇数和偶数张分别执行哪种Faro shuffle,就一种而已:

MongeShuffle(D) = MilkShuffle ^ - 1(D)

别看milk shuffle仅仅是中间穿插了半叠的reverse操作,其操作的阶次已经不能够再像原来的完美洗牌定理那样推导得到了,这部分内容我们留作以后思考解决。

顺便再提一下,在《文字对称中的数学与魔术(四)——魔术《3 or 8》》中的《3 or 8》这个魔术作品setting的时候,有一系列依次翻转一叠牌的顶部k张,k依次减小的操作,当k从张数减1一直到1每次减1递减时,这个洗牌的结果就刚好是milk shuffle的结果,也是它的一个变种,当然我们不考虑朝向的变化。另外在《CATO原理中的数学与魔术(六)——Baby Hummer的拓展一》的《骗数的选择》中,一样用到了这个。可见,数学性质总是隐藏在表象的背后,像一只看不见的手组织着自然地秩序,哪怕它们表面上看起来,毫无关系。

以上就是完美洗牌相关数学性质的详细探讨,其实还有一个明显的拓展就是通过依次发牌和依次收牌这两套互逆的操作去实现更高维度的完美洗牌。如果再给定一些特殊的收牌次序,将会得到一些非常有意思的序列特性。这些内容,上古的大师peirce曾经研究过,被Perci diaconis等人重新总结过,我们后面再介绍质数,同余等代数内容的时候,我们再来专门予以介绍。甚至CATO相关操作也可以纳入完美洗牌的二进制范畴来思考的,甚至由此引出新的高阶拓展,我们后面再慢慢分析,尽请期待。

精彩抢先看!

视频1 penehole's principle magic more

6afcac1477d7600e2c2c919984f33f7d.gif

我们是谁:

MatheMagician,中文“数学魔术师”,原指用数学设计魔术的魔术师和数学家。既取其用数学来变魔术的本义,也取像魔术一样玩数学的意思。文章内容涵盖互联网,计算机,统计,算法,NLP等前沿的数学及应用领域;也包括魔术思想,流程鉴赏等魔术内容;以及结合二者的数学魔术分享,还有一些思辨性的谈天说地的随笔。希望你能和我一起,既能感性思考又保持理性思维,享受人生乐趣。欢迎扫码关注和在文末或公众号留言与我交流!

923343dcc9660e05ddc9288667cb9e25.gif

c312f3cda443b34cac957de557d55590.png

cb83096ba12c7444e71ae1ddafce0428.jpeg

扫描二维码

关注更多精彩

完美洗牌的秘密(四)——(反)完美洗牌第三定理

易拉罐的奇迹(二)——《易拉罐平衡》与《气体转移》

2024阿里巴巴全球数学竞赛决赛中的数列题解析(分析与方程方向第4题)

CATO原理中的数学与魔术(十四)——流程设计思路与升华

魔术里的交代与暗交代(三)——暗交代是怎么做的?

796b8a5300080d554bdeb0117dd54a4c.gif

点击阅读原文,往期精彩不错过!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2091532.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

公务员事业编【判断推理】 之“逻辑判断” 个人NOTE

目录 1、翻译推理 1.1 翻译规则之“前推后” 1.2 翻译规则之“逆否等价” 1.3 翻译规则之“后推前” 1.4 且和或 2、组合排列&#xff08;代入法/排除法&#xff09; 3、日常结论 4、逻辑论证 4.1 加强类 4.1.1 搭桥&#xff08;论证力度最强&#xff09; 4.1.2 补充…

系统架构设计师 - 软件架构设计(2)

软件架构设计 软件架构设计&#xff08;20多分&#xff09;最重要基于架构的软件开发 ★ ★ ★概念开发过程架构需求、设计过程架构文档化架构复审架构实现、演化过程 软件质量属性 ★ ★ ★ ★ ★软件架构评估 ★ ★ ★ ★ ★概念架构评估方法评估方式基于场景的评估方法 软件…

EmguCV学习笔记 VB.Net 9.1 VideoCapture类

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…

人工智能开发实战MNIST数据集及神经网络完全解析

内容提要 MNIST数据集简介神经元常用函数深度神经网络卷积神经网络介绍循环神经网络 一、MNIST数据集简介 数据集&#xff08;Dataset&#xff09;是一类数据的集合。传统的数据集通常表现为表格或者文档形式&#xff0c;每个数值被称为数据资料。 MNIST数据集是一个含有手写…

ARM32开发——(二十四)电源管理单元

1. 重点 了解什么是电池管理单元PMU了解ARM32中的电源域了解几种省电模式 2. 主要内容 2.1 PMU PMU全称Power Management Unit&#xff0c;电源管理单元。 2.2 电源域 总共有三大电源域&#xff0c;包括VDD / VDDA域&#xff0c;1.2V域和备份域。 2.2.1 VDD/VDDA域 VDD/…

2024最新最全:网络安全软件大合集(非常详细)零基础入门到精通,收藏这一篇就够了

安全建议&#xff1a;渗透类软件&#xff0c;建议先在虚拟机试运行&#xff01; VMware虚拟机 https://pan.quark.cn/s/6e439e2c15c1 下载KALI&#xff08;安装版&#xff09; https://pan.quark.cn/s/2124bdf3c732 下载KALI&#xff08;免安装版&#xff09; https://pa…

解决警告【WARNING: Ignoring invalid distribution -xxx 】

1、问题发生 出现警告【WARNING: Ignoring invalid distribution -umpy (c:\programdata\anaconda3\lib\site-packages)】 2、解决方法 进入报错文件夹 &#xff0c;删除相关文件夹 3、解决效果

【C++标准模版库】模拟实现容器适配器:stack、queue、priority_queue(优先级队列)

stack和queue 一.容器适配器1.什么是适配器 二.模拟实现stack和queue三.STL标准库中stack和queue的底层结构四.deque&#xff08;双端队列&#xff09;的简单介绍五.deque作为stack和queue的默认容器的原因六.priority_queue&#xff08;优先级队列&#xff09;的介绍和使用七.…

前端性能优化--元素类型和dom层级

展示相同布局&#xff0c;使用控制变量法&#xff0c;对比性能差距 1. 结论&#xff1a;用块级元素模拟行内元素时&#xff0c;会有性能浪费&#xff0c;所以能用行内元素的&#xff0c;就不要使用块元素(能用span就不用div) 2. 结论&#xff1a;行内元素模拟块级元素时&…

rk3588_dp调试

配置流程&#xff1a; 开启usbusb需要绑定dpdp绑定vp 查看rk3588内部寄存器可知 需要在USB3.0控制器中打开DP0 在设备树中需要在usb3dp端口。 usbc0: fusb3024e { ......ports {port1 { reg <1>; …

SpringBoot配置MybatisPlus

文章目录 介绍特性工作流程图添加依赖Spring Boot2Spring Boot3 配置定义Mapper接口并继承BaseMapperServer 接口自定义 Service 接口继承 IServie 接口自定义 Service 实现类&#xff0c;实现自定义接口并继承 ServiceImpl 添加Config类 介绍 MyBatis-Plus 是一个 MyBatis 的…

uniapp钱包支付、与设置密码页面

设置密码页面 <template><view class="paymentCodeBox"><!-- 自定义键盘 -->

计算机毕业设计推荐-基于python的电子图书馆数据可视化分析

&#x1f496;&#x1f525;作者主页&#xff1a;毕设木哥 精彩专栏推荐订阅&#xff1a;在 下方专栏&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; 实战项目 文章目录 实战项目 一、基于python的电子图书馆数据…

95.WEB渗透测试-信息收集-Google语法(9)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;94.WEB渗透测试-信息收集-Google语法&#xff08;8&#xff09; • site &#xff1a; x…

nacos集群部署和VIP部署

1. 准备工作 nacos版本2.2.1 nginx版本1.24.0 2. nacos集群部署 2.1 下载nacos版本后&#xff0c;解压&#xff0c;然后复制三份nacos 2.2 分别修改三个nacos文件下config目录下的application.properties文件&#xff0c;三个nacos的端口修改为8846,8848,8850。 2.3 修改c…

C++解决:【基础】高精度整数除法

描述 求a/b的结果。 已知a&#xff0c;b为10^8范围内的非负整数&#xff0c;求a/b保留前n位小数商的结果。 输入描述 a b n 输出描述 一行数字 用例输入 1 97 61 50 用例输出1 1.59016393442622950819672131147540983606557377049180来源 高精度算法 AC code 方案一…

IGCSE计算机 cs0478 内容介绍

作者&#xff1a; 大爽老师&#xff0c;国际教育编程老师&#xff0c;熟悉AP/IG/ALevel, 擅长Python和Java 剑桥IGCSE计算机课程&#xff08;IGCSE Computer Science&#xff09;课程代码为0478&#xff0c;是为对计算机科学基础感兴趣的学生设计的课程。该课程为学生提供了计算…

WHAT - 最常用的 base64 数据编码方式(含 Blob 和 ArrayBuffer)

目录 一、介绍1. Base64 的工作原理Base64 字符集Base64 编码基本原理Base64 编码具体解释 2. Base64 的编码示例3. Base64 的应用3.1 在 URL 中嵌入数据3.2 电子邮件附件3.3 数据传输3.4 存储与缓存总结 4. 在 JavaScript 中使用 Base64编码解码使用 Buffer (Node.js) 一、介绍…

基于Python的重庆市气象数据分析可视化—计算机毕业设计源码24928

摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对气象数据等问题&#xff0c;对气象信息进行…

大数据-112 Flink DataStreamAPI 程序输入源 DataSource 基于文件、集合、Kafka连接器

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…