魔术里的集合、映射和关系(六)——情怀之作《连环预言》的数学模型

2023-10-16 21:30

本文主要是介绍魔术里的集合、映射和关系(六)——情怀之作《连环预言》的数学模型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在前面的作品中我们用了3篇的篇幅来讲解集合,映射和关系的这些数学概念,上两篇也终于进入了魔术部分,给大家从数学和魔术角度分享了一个优雅的作品《4 Kings 折纸》,对相关内容还不了解的同学可以先回顾一下:

 

魔术里的集合、映射和关系(五)——优雅之作《4 Kings 折纸》的集合描述

魔术里的集合、映射和关系(四)——优雅之作《4 Kings 折纸》魔术赏析

魔术里的集合、映射和关系(三)——关系和映射的关系

魔术里的集合、映射和关系(二)——集合怎么用?

魔术里的集合、映射和关系(一)——集合是个啥?

 

今天我们分享下一个魔术,是我很小的时候学的一个扑克牌魔术。

 

先看表演吧!

 

视频1 连环预言

 

陈年旧事

那时候家里应该还没有买电脑,电视上出现的魔术都只能看一遍直播再加一遍重播,如果扒不下来的话,可能就不知道以后何年何月才能看得到了。所以后来互联网,尤其是百度的出现真的让我觉得技术真的能够改变世界,彻底地改变了人们的信息交互方式。居然可以免费地获取如此海量的资源,对于当时一个想学魔术的孩子来说,又何尝不是一件幸事呢?

 

这个《连环预言》魔术,应该是刘谦在某一集《越策越开心》中的表演,可能在其他节目也看到过,后来得知其原型来自于格林,真是佳作自有出处。小时候他在我的生活中留下太多印记了,这些大多还发生在09春晚之前,反倒是之后,大家都掀起热潮以后,我并不像以前那样疯狂的追魔术了,因为真的差不多都看过很多遍了。

 

那时候学魔术基本上全靠扒,因为不像现在这样获取各种资源这么方便,也没有掏钱上过培训班,更不是什么魔术世家,走得很慢倒也乐在其中,就像一次次科学探索一样。虽然后来知道,魔术还有艺术价值,不仅仅是科学了。

 

通过直播和重播,《连环预言》的每一个步骤都被我扒下来了,自然也就倒推回去发现,这样的洗牌方式并不会改变预言里面的那些内容,因此只需要提前准备好就可以了。于是,我兴奋地制作着视频里那张预言卡片,以及在后来的表演中,成为压箱底的表演节目之一。

很多我自己做的道具都无比简陋,就像这个连环预言的卡片,至少有8年了,大家从里面那张红心5的质感就可以判断出来。还有自己用透明胶贴的绿野仙踪,在我还是一个小学生的时候,一个兴奋的周五的晚上制作的,15年了。但是拿他们出来演就会有种特别的怀念,感受到一种久远的情怀,哪怕新买的道具质量再好,也比不过。

图1 连环预言自制道具

 

然而那时候虽然经历了看到惊艳的效果,到搞清楚洗牌不变的现象,以及所有的操作。但是对为什么这样洗牌会有这些不变的结果,以及到底哪些变了哪些没变等等精确地描述并没能够很好地总结出来。居然就让它以这种“并未严格证明”状态存在了这么多年,哪怕已经表演过不知道多少次了,却依然很安全,从未出现过什么岔子。

 

可见啊,客观规律,其实发现和总结出来是什么,怎么做,形成定律,在大多时候,就够了。至于为什么,有时候是没个头和说不清的。换言之,你理解不理解地球为什么这么转和地球会不会转没有半毛钱关系,除了让你内心安稳一些罢了。相反,像工,农,医等更加强调实用性的学科,有用还比理论价值更受重视。

 

但是,谁叫我想做个数学魔术师呢?

 

历史回顾结束,下面先进行数学原理的剖析。

 

数学原理

很早的时候能够隐隐约约感觉到,这么洗牌看起来很乱,一定有某些东西没有变。还能够举例子说明,你看,这张牌如果洗过去到另一叠,翻面了,再洗回来的话又恢复原状了,所以最后的结果也不会变。

 

按理来说,不求甚解的玩法到这里就可以大胆地拿去表演了。可是总感觉这种举例说明的方式并不能够说服一个理性的大脑,也并没有分析清楚,这个洗牌中,到底是哪些东西变了,哪些东西没变。以及,最后的结果,是否就恰好是那些没变的部分?

 

这一切,都要透过现象看本质,需要精确的数学语言来描述。

 

我们首先为整个扑克牌全集建立集合,注意,这个集合取哪些性质作为描述对象的内容很关键(即我们关注的是哪些性质,哪些是可以忽略的,表达的是我们的研究目的,而其他无关因素要知道忽略而能抓住主要矛盾):

 

D = {(p, f)i | p in {left, right}, f in{face, back}, i in 1:54}

 

我们以i对扑克牌实体编号,关心的是其处在左右哪叠牌的位置,以及正反朝向。显然,这两个量是一直在变化的,也是我们关心的,而且,两个都是bool变量。

然后,我们为出现在左侧的那叠牌建立一个集合:

 

E = {(p, f)i | (p, f)i in D, (p == left xor f == face) = true}

 

xor是亦或符号,牌都是背面向上的,所以成立。

 

那么,右侧的牌是其补集:

 

C(D, E) = {(p, f)i | (p, f)i in D, (p = left nxor f = face) = true}

 

nxor是同或运算,是xor运算的非结果,关于这部分bool代数的内容,在上一篇

 

魔术里的集合、映射和关系(五)——优雅之作《4 Kings 折纸》的集合描述

 

中已经介绍过,这里不在赘述,有兴趣的同学可以回头查看,和本篇的分析思路十分的相似。

 

有人会问,你凭什么一下就想到xor这种运算来描述这里的性质?并最后建模成功?

说实话,我还真没有一下就想到,从数理逻辑里直到xor运算到完全破解这个魔术的原理,可能都好几年过去了。是很久以后,突然有一天,惊喜地发现,居然这里的不变性,可以用这个运算来表达。

到这里,对扑克牌的状态建模已经完成了,接下来,我们要证明的是,这个集合在这种洗牌方式下,是不变的。

 

然而这是显然的。

 

无论从哪一叠拿走多少张牌,对于每一张拿走的牌来说,都同时改变了其p和f的值,据xor的对称运算的性质

 

a xor b = (not a) xor (not b)

 

故原来的每一张牌所在的集合仍然不会改变。

 

而那些没有被拿到的牌,自然不会变。

 

这一性质一直保持到最后合成一叠牌。

也就是,扑克牌最开始在哪个集合,最后还在哪个集合,这个常数一直保持到最后。

 

而现在,可以看作,所有的牌的p = left,故其所在集合的结论仅由f决定,而那些向上的牌,恰好全部来自E集合。也就是预先设置好setting的那叠牌。然后后面所有各种多少张红色、黑色,多少张花牌、数字牌等等就都完成了。

 

证毕。

所以,看问题的视角得有多重要,在这些操作中,找到了最合适的运算,才能找到暗含在内部的不变性结构,问题瞬间变得清晰明了。

有没有感觉,和上一讲魔术里的集合、映射和关系(五)——优雅之作《4 Kings 折纸》的集合描述里的模型,几乎是一回事?但是魔术表演起来,完全是不同的效果?

当然,这一切都是数学的说法,是在一些模糊觉得正确的认知基础之上,通过绝对严谨的逻辑推理来对正确性进行证明。

先进行数学建模,再数学证明的结论并非都正确,因为前提假设的说法也许包含了化简和特殊的定义理解。但是,其思维价值在于,只要你的前提是对的,我保证你从前提到结论的逻辑链条完全正确。

以上是《连环预言》这个作品的数学剖析,其魔术部分赏析,我们下回分解。

我们是谁:MatheMagician,中文“数学魔术师”,原指用数学设计魔术的魔术师和数学家。既取其用数学来变魔术的本义,也取像魔术一样玩数学的意思。文章内容涵盖互联网,计算机,统计,算法,NLP等前沿的数学及应用领域;也包括魔术思想,流程鉴赏等魔术内容;以及结合二者的数学魔术分享,还有一些思辨性的谈天说地的随笔。希望你能和我一起,既能感性思考又保持理性思维,享受人生乐趣。欢迎扫码关注和在文末或公众号留言与我交流!
扫描二维码关注更多精彩
魔术里的集合、映射和关系(五)——优雅之作《4 Kings 折纸》的集合描述
我和Double Lift的故事(五)——升华篇闯红灯到底该不该罚款?——逻辑推理浅谈(二)循环、递归与魔术(五)——再谈递归的魔术逻辑与欣赏Roberto Giobbi的纸牌大学

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

这篇关于魔术里的集合、映射和关系(六)——情怀之作《连环预言》的数学模型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/220888

相关文章

python安装whl包并解决依赖关系的实现

《python安装whl包并解决依赖关系的实现》本文主要介绍了python安装whl包并解决依赖关系的实现,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录一、什么是whl文件?二、我们为什么需要使用whl文件来安装python库?三、我们应该去哪儿下

Java集合中的List超详细讲解

《Java集合中的List超详细讲解》本文详细介绍了Java集合框架中的List接口,包括其在集合中的位置、继承体系、常用操作和代码示例,以及不同实现类(如ArrayList、LinkedList和V... 目录一,List的继承体系二,List的常用操作及代码示例1,创建List实例2,增加元素3,访问元

Java中基于注解的代码生成工具MapStruct映射使用详解

《Java中基于注解的代码生成工具MapStruct映射使用详解》MapStruct作为一个基于注解的代码生成工具,为我们提供了一种更加优雅、高效的解决方案,本文主要为大家介绍了它的具体使用,感兴趣... 目录介绍优缺点优点缺点核心注解及详细使用语法说明@Mapper@Mapping@Mappings@Co

C#比较两个List集合内容是否相同的几种方法

《C#比较两个List集合内容是否相同的几种方法》本文详细介绍了在C#中比较两个List集合内容是否相同的方法,包括非自定义类和自定义类的元素比较,对于非自定义类,可以使用SequenceEqual、... 目录 一、非自定义类的元素比较1. 使用 SequenceEqual 方法(顺序和内容都相等)2.

MYSQL关联关系查询方式

《MYSQL关联关系查询方式》文章详细介绍了MySQL中如何使用内连接和左外连接进行表的关联查询,并展示了如何选择列和使用别名,文章还提供了一些关于查询优化的建议,并鼓励读者参考和支持脚本之家... 目录mysql关联关系查询关联关系查询这个查询做了以下几件事MySQL自关联查询总结MYSQL关联关系查询

在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码

《在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码》在MyBatis的XML映射文件中,trim元素用于动态添加SQL语句的一部分,处理前缀、后缀及多余的逗号或连接符,示... 在MyBATis的XML映射文件中,<trim>元素用于动态地添加SQL语句的一部分,例如SET或W

基于Redis有序集合实现滑动窗口限流的步骤

《基于Redis有序集合实现滑动窗口限流的步骤》滑动窗口算法是一种基于时间窗口的限流算法,通过动态地滑动窗口,可以动态调整限流的速率,Redis有序集合可以用来实现滑动窗口限流,本文介绍基于Redis... 滑动窗口算法是一种基于时间窗口的限流算法,它将时间划分为若干个固定大小的窗口,每个窗口内记录了该时间

uva 11178 计算集合模板题

题意: 求三角形行三个角三等分点射线交出的内三角形坐标。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <

POJ1269 判断2条直线的位置关系

题目大意:给两个点能够确定一条直线,题目给出两条直线(由4个点确定),要求判断出这两条直线的关系:平行,同线,相交。如果相交还要求出交点坐标。 解题思路: 先判断两条直线p1p2, q1q2是否共线, 如果不是,再判断 直线 是否平行, 如果还不是, 则两直线相交。  判断共线:  p1p2q1 共线 且 p1p2q2 共线 ,共线用叉乘为 0  来判断,  判断 平行:  p1p

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip