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

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

相关文章

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

Java基础回顾系列-第六天-Java集合

Java基础回顾系列-第六天-Java集合 集合概述数组的弊端集合框架的优点Java集合关系图集合框架体系图java.util.Collection接口 List集合java.util.List接口java.util.ArrayListjava.util.LinkedListjava.util.Vector Set集合java.util.Set接口java.util.HashSetjava

【408数据结构】散列 (哈希)知识点集合复习考点题目

苏泽  “弃工从研”的路上很孤独,于是我记下了些许笔记相伴,希望能够帮助到大家    知识点 1. 散列查找 散列查找是一种高效的查找方法,它通过散列函数将关键字映射到数组的一个位置,从而实现快速查找。这种方法的时间复杂度平均为(

java集合的概述

集合就是一个容器,我们可以把多个对象放入的容器中。就像水杯(假设容量可以不断扩大)一样,你可以往水杯中不断地添加水,既然是水杯,你就不能往里添加沙子,也就是说集合中添加的对象必须是同一个类型的(引用类型,而不能是基本类型)。 看到集合的介绍会让我们的想起数组,那么集合和数组有什么区别呢? 首先,数组的大小是固定的,而集合理论上大小是不限的。 其次,数组既可以存储基本数据类型的数据,也可以存储

魔术方法介绍

目录 一、基本介绍 1、什么是魔术方法 2、常见的魔术方法 二、__str__ 1、基本介绍 2、应用实例:请输出Monster对象的属性信息 三、__eq__ 1、基本介绍 2、应用实例 四、其它几个魔术方法 1、其它魔术方法 2、应用实例 参考文档:3. 数据模型 — Python 3.12.5 文档 一、基本介绍 1、什么是魔术方法 1)在Pyth

读软件设计的要素04概念的关系

1. 概念的关系 1.1. 概念是独立的,彼此间无须相互依赖 1.1.1. 一个概念是应该独立地被理解、设计和实现的 1.1.2. 独立性是概念的简单性和可重用性的关键 1.2. 软件存在依赖性 1.2.1. 不是说一个概念需要依赖另一个概念才能正确运行 1.2.2. 只有当一个概念存在时,包含另一个概念才有意义 1.3. 概念依赖关系图简要概括了软件的概念和概念存在的理

数据依赖基础入门:函数依赖与数据库设计的关系

在数据库设计中,数据依赖 是一个重要的概念,它直接影响到数据库的结构和性能。函数依赖 作为数据依赖的一种,是规范化理论的基础,对数据库设计起着至关重要的作用。如果你是一名数据库设计的初学者,这篇文章将帮助你理解函数依赖及其在数据库设计中的应用。 什么是数据依赖? 数据依赖 是指同一关系中属性间的相互依赖和制约关系,它是数据库设计中语义的体现。在现实世界中,数据之间往往存在某种依赖关系,而这

c++ 和C语言的兼容性关系

C++ 和 C 语言有很高的兼容性,但也存在一些差异和限制。下面是它们的兼容性关系的详细介绍: 兼容性 C++ 是 C 的超集: C++ 语言设计为兼容 C 语言的语法和功能,大部分 C 代码可以在 C++ 编译器中编译运行。 标准库兼容性: C++ 标准库包含了 C 标准库的内容,如 stdio.h、stdlib.h、string.h 等头文件,但 C++ 的标准库也提供了额外的功能,如