字母预言卡里的魔术与数学(四)——Sperner's Theorem的美妙证明

2023-10-16 21:30

本文主要是介绍字母预言卡里的魔术与数学(四)——Sperner's Theorem的美妙证明,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

爱学习,勤思考;学数学,玩魔术。欢迎点击头部蓝字关注MatheMagician,这里有你要的奇迹!


终于来到本系列的最后一篇!

 

在前面三期文章中,我们就《字母预言卡》这个魔术所包含的表演技巧和背后的数学模型的分析和完整建模给大家作了阐述。相关内容回顾如下:

 




 

这里再放一下对应魔术的表演视频:

 

视频1 字母预言卡

 

以及数学建模对这个魔术背后的数学转化

 

给定m个元素e1,2…m,n个该m个元素构成集合的子集S1,2,…n,求解这样的{Sn},使得对任意的元素ei和ej,有如下式子成立,全部写成公式就是:


 

640?wx_fmt=png


(这里属于符号表达的意思其实是取遍右边集合的元素)

 

这里,我们对给定的n,构造的上界m =C(n, [n / 2]),构造的解是:


 

640?wx_fmt=png


 

我们需要证明我们的解符合条件,以及是元素最多的哪一个。

 

符合条件在上一讲已经用反证法给出了简单说明,第二个问题则通过信息论思路给予了不严格的解释,那么本篇我们来给出严格证明以及由此牵扯出背后更多的数学背景。

 

要证明的结论,最后转化为了这么一个纯数学问题:

 

大小为n一个集合两两互不包含的子集的最大数量是C(n, [n / 2])。

 

问题分析

 

根据前面和信息论相关的结论猜测,这个最大数量的形式一定是C(k, n),否则不同元素选项会带来不一样的卡片元素数量使得每次给出的信息量并不相同。作为一个要精准预测的魔术,这会因为在极端情况下信息不足而是不利的。如果证明了这一点,那么只需要证明k = [n / 2]时取该关于k的函数的最大值就好了,而这是显然的。

 

定理证明如下:

 

首先说明,这个最大的子集的构成元素集合大小必定有相同元素数量的。

 

作为一个集合A的幂集(powerset),恰好可以在包含关系下构成偏序集(partially ordered set),满足自反性(reflexivity),反对称性(anti-symmetry),和传递性(transitivity)。相同元素数量的集合恰好在同一层级,互不包含。假设其中一个集合A的元素比其他都多,处在更高层级,那么由于其他元素都不能够被其包含,下面所有链条上的集合元素都不能够在这个子集里。而对于该元素,如果把它删除,改成其内元素任意删除一个集合,有|A|种方法,那么只要|A| - 1 > 0,即|A| >= 2时,这个操作就可以在不破坏两两互不包含性质的情况下增加元素数量。而|A|= 1的话,那就没有比这个最高层级还低的非空集合的元素了,因此,由反证法,原命题成立,这个最大的子集的构成元素集合大小必定有相同元素数量的。

 

剩下的事情就很简单了,证明k的函数C(k,n),当k = [n / 2]时取最大值即可。而这是显然的,因为其他的k化为它之前都要乘以若干个大于1的数。

 

证毕。

 

Sperner's Theorem

 

本以为这样就完了,没想到一点带面查了一些资料以后发现了更大的一个坑。感谢同事给我提出的思路,让我找到了这个定理的出处。

 

上面这个问题还真有人研究过,还真是个定理,其描述和我得到的这个结论竟然一模一样,名字叫Sperner's Theorem:

 

Sperner's theorem, in discrete mathematics,describes the largest possible families of finite sets none of which containany other sets in the family. It is one of the central results in extremal settheory, and is named after Emanuel Sperner, who published it in 1928.

 

(参考资料:https://en.wikipedia.org/wiki/Sperner%27s_theorem)

 

一不小心就发现一个新大陆,叫Extremal Set Theory,以这种学无止境的方式不断凭借兴趣去拓宽自己的知识外延,实在是一个美好的事。因为每个知识摄入大脑的时候,都伴随着幸福美好有令人激动的回忆。

 

这个证明中,用到了LYM inequality不等式来进行放缩法完成的,而LYM inequality的证明本身又用到了十分巧妙地排列数构造的策略,让人惊叹不已,让我们来一起欣赏一下。

 

首先,我们令sk为所有在目标S集合中大小为k的集合的数量,对于[0, n]的k值,我们有:

 

C(n, [n / 2]) >= C(n, k)

 

于是,我们有:

 

sk / C(n, [n / 2]) <= sk / C(n, k)

 

根据LYM inequality,

 

sum(sk / C(n, [n / 2])) <= sum(sk / C(n,k)) <= 1,sum对k变量取[0, n]中的所有整数。

 

因此,

 

|S| = sum(sk) <= C(n, [n / 2])

 

原命题得证。

 

LYM定理不等式

 

下面继续证明一下以上证明用到的LYM不等式。

 

(参考资料:

https://en.wikipedia.org/wiki/Lubell%E2%80%93Yamamoto%E2%80%93Meshalkin_inequality)

 

证明:sum(sk / C(n, k)) <= 1,sum对k变量取[0, n]中的所有整数。

 

证明过程及其简洁,用到了巧妙的数学构造法:

 

假设把整个S集合的每个元素都分成两份,一份是它自己,另一份是其补集,再把这两份进行全排列后拼起来,构成一个完成排列,于是我们有:


640?wx_fmt=png

 

把n!两边除掉,根据组合数公式,即为所证明的式子。

 

数学的思考和证明总是这样没完没了,但是突然一下到达光辉的终点,又有一般事情所不能企及的幸福美好。

 

回忆起我时长出现的心流,儿时很多个日夜的钻研和思考的样子,正是我今天学习研究的影子,也许曾经上某节奥数课的时候老师讲过这个问题,我只是忘了又重新走了一遍探索的路,又也许从不曾碰到,只是堆在那里的那些积累总有些似曾相识的部分,又总有那么多突如其来的思路让我兴奋,颅内高潮,停留在这个瞬间久久不愿离去。

 

到此为止,这个定理的证明算是全部完成了,这个魔术的数学原理全部证明完毕,这个魔术的数学建模也已经在传送门中清晰明了,而怎么把它用更优雅的方式包装和表演出来,也曾在传送门中,娓娓道来。

 

整个系列的作品,像一个栈一样,不断压入元素,不断深层调用,当我们清空到栈顶的那一刻,感觉凌晨的天空,都是明亮的。



 

本公众号现不定期放送数学和魔术相关学习资料,都是作者精心筛选整理后准备给大家的精华内容!现在进入公众号后台:


回复“数学”,获取《数学建模算法与应用》,数模比赛经典教材,司守奎著

回复“数学2”,获取《Pattern Recognition and Machine Learning》,机器学习和模式识别领域的圣经,英文原版


回复“魔术3”,获取magic2728本人魔术基础教学:《Double Lift讲解》

 

回复“魔术4”,获取magic2728本人魔术表演作品:《混沌的世界》

 


好了,今天数学魔术师的分享就到这里,希望各位客官喜欢,期待您的转发和赞赏哦!

 

更多精彩内容欢迎扫描下方二维码关注我们,下期再见!

640?wx_fmt=jpeg

我们是谁:


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


 

推荐阅读:






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

这篇关于字母预言卡里的魔术与数学(四)——Sperner's Theorem的美妙证明的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

usaco 1.2 Name That Number(数字字母转化)

巧妙的利用code[b[0]-'A'] 将字符ABC...Z转换为数字 需要注意的是重新开一个数组 c [ ] 存储字符串 应人为的在末尾附上 ‘ \ 0 ’ 详见代码: /*ID: who jayLANG: C++TASK: namenum*/#include<stdio.h>#include<string.h>int main(){FILE *fin = fopen (

uva 10014 Simple calculations(数学推导)

直接按照题意来推导最后的结果就行了。 开始的时候只做到了第一个推导,第二次没有继续下去。 代码: #include<stdio.h>int main(){int T, n, i;double a, aa, sum, temp, ans;scanf("%d", &T);while(T--){scanf("%d", &n);scanf("%lf", &first);scanf

uva 10025 The ? 1 ? 2 ? ... ? n = k problem(数学)

题意是    ?  1  ?  2  ?  ...  ?  n = k 式子中给k,? 处可以填 + 也可以填 - ,问最小满足条件的n。 e.g k = 12  - 1 + 2 + 3 + 4 + 5 + 6 - 7 = 12 with n = 7。 先给证明,令 S(n) = 1 + 2 + 3 + 4 + 5 + .... + n 暴搜n,搜出当 S(n) >=

uva 11044 Searching for Nessy(小学数学)

题意是给出一个n*m的格子,求出里面有多少个不重合的九宫格。 (rows / 3) * (columns / 3) K.o 代码: #include <stdio.h>int main(){int ncase;scanf("%d", &ncase);while (ncase--){int rows, columns;scanf("%d%d", &rows, &col

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

数学建模笔记—— 非线性规划

数学建模笔记—— 非线性规划 非线性规划1. 模型原理1.1 非线性规划的标准型1.2 非线性规划求解的Matlab函数 2. 典型例题3. matlab代码求解3.1 例1 一个简单示例3.2 例2 选址问题1. 第一问 线性规划2. 第二问 非线性规划 非线性规划 非线性规划是一种求解目标函数或约束条件中有一个或几个非线性函数的最优化问题的方法。运筹学的一个重要分支。2

CSP-J基础之数学基础 初等数论 一篇搞懂(一)

文章目录 前言声明初等数论是什么初等数论历史1. **古代时期**2. **中世纪时期**3. **文艺复兴与近代**4. **现代时期** 整数的整除性约数什么样的整数除什么样的整数才能得到整数?条件:举例说明:一般化: 判断两个数能否被整除 因数与倍数质数与复合数使用开根号法判定质数哥德巴赫猜想最大公因数与辗转相除法计算最大公因数的常用方法:举几个例子:例子 1: 计算 12 和 18

2024年AMC10美国数学竞赛倒计时两个月:吃透1250道真题和知识点(持续)

根据通知,2024年AMC10美国数学竞赛的报名还有两周,正式比赛还有两个月就要开始了。计划参赛的孩子们要记好时间,认真备考,最后冲刺再提高成绩。 那么如何备考2024年AMC10美国数学竞赛呢?做真题,吃透真题和背后的知识点是备考AMC8、AMC10有效的方法之一。通过做真题,可以帮助孩子找到真实竞赛的感觉,而且更加贴近比赛的内容,可以通过真题查漏补缺,更有针对性的补齐知识的短板。

魔术方法介绍

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

一些数学经验总结——关于将原一元二次函数增加一些限制条件后最优结果的对比(主要针对公平关切相关的建模)

1.没有分段的情况 原函数为一元二次凹函数(开口向下),如下: 因为要使得其存在正解,必须满足,那么。 上述函数的最优结果为:,。 对应的mathematica代码如下: Clear["Global`*"]f0[x_, a_, b_, c_, d_] := (a*x - b)*(d - c*x);(*(b c+a d)/(2 a c)*)Maximize[{f0[x, a, b,