IT之家 2 月 11 日消息,刘谦在今年春晚表演的魔术引发网友热议,对此,北京大学官方公众号进行了详细解读,并揭秘背后的数学问题 ——“约瑟夫问题”。
魔术操作步骤:
步骤 1:将准备好的 4 张扑克牌平均撕成两份,并叠在一起。
步骤 2:将牌堆顶数量为【名字字数】的牌移至牌堆底。
步骤 3:将前三张牌放在牌堆中间并取出牌堆顶的牌,放置在一旁。
步骤 4:取出牌堆顶的若干张牌插入牌堆中间,此处选择的牌数为南方人取 1 张,北方人取 2 张,若不确定是南方人还是北方人取 3 张。
步骤 5:男生扔掉牌堆顶 1 张,女生扔掉牌堆顶 2 张。
步骤 6:执行“见证奇迹的时刻”循环,每说一个字,就取出牌堆顶一张牌放置在牌堆底。
步骤 7:从牌堆顶开始,每次先将牌堆顶的一张牌放在牌堆底,再扔掉牌堆顶的一张牌,重复以上操作直到只剩一张牌,检查此牌和放置在一旁的牌是否吻合。若吻合,则魔术成功。
魔术步骤揭秘:
步骤一
我们令选择的四张扑克牌分别为 1234,将他们分别撕开后,产生了标号分别为 1234 的两套(半张)扑克牌,叠在一起后形成了从上至下标号分别为 12341234 的扑克牌堆。
步骤二
此时我们可以注意到,无论我们将牌堆顶的多少张牌移到堆底,得到的扑克牌堆编号(IT之家注:从上至下)都只会有以下几种结果:
12341234(名字字数被四整除)
23412341(名字字数模四余一)
34123412(名字字数模四余二)
41234123(名字字数模四余三)
观察以上可能的牌堆,我们可以发现产生的牌堆都具有以下性质:
1. 前四张牌和后四张牌的顺序完全一样
2. 前四张牌和后四张牌分别是 1234 的一个轮换
步骤三
从这一步开始,我们只考虑当前牌堆中排在第四及第八的两张牌,记为 X,其他牌记为 0。那么根据上一步的讨论,可以得到当前的牌堆形如:000X000X。
将前三张放在牌堆中间后,无论这三张放在什么位置,最终产生的牌堆都将是:X000000X。
于是乎,被选择的用于配对的牌就将是 X,而另一张与之配对的牌(称为目标牌)将位于牌堆底。
步骤四
在上一步之后,牌堆的编号为 000000X,于是,无论本轮中选择牌堆顶多少张牌插入牌堆中,都不会影响目标牌的位置,仍然处于牌堆底部。
步骤五
此时男生的牌堆为:00000X。女生的牌堆为:0000X。
步骤六
通过尝试可知,在经过步骤六后将得到如下的牌堆:
男生:0000X0
女生:00X00
步骤七
到此,便完成刘谦本次魔术的步骤揭秘,北京大学进一步解释称这其实是一个“约瑟夫问题”:
设有编号为 1,2,……,n 的 n 个人围成一个圈,从第 1 个人开始报数,报到 m 时停止报数,报 m 的人出圈。再从他的下一个人起重新报数,报到 m 时停止报数,报 m 的出圈...... 按照这个规则进行下来,直到所有人全部出圈为止。求最后留下来的人编号。
为了使问题简化,我们考虑 n 个人编号为 0 ~ n-1 的情况,每 m 个人退出一个人,我们称之为(n,m)问题。第一个人(即编号为在模 n 下同余 m 的人)退出之后,对剩下的 n-1 个人重新编号,则新问题的 k 号在原问题中对应 k+m 号。因此(n, m)问题的解 J (n, m) = J (n-1, m)+m 且 J (1, m) = 1(模 n 意义下)。据此,通过递推的方法可以得到 J (n, m)。在实践中,约瑟夫问题一般用代码进行求解。刘谦的魔术中使用的便是 m=2 的特殊情况。
广告声明:文内含有的对外跳转链接(包括不限于超链接、二维码、口令等形式),用于传递更多信息,节省甄选时间,结果仅供参考,IT之家所有文章均包含本声明。