
容许笔者暂时跑题一下,请看这道谜题:
第
假定这些人在参加游戏前已经对游戏中采取的策略达成共识。游戏开始后,从最后一个人轮流向前报数字,要求数字范围为
请问:何种策略可以保证尽可能多的人报的数字恰好是自己背后的数字? 数量是多少?
对这个问题感兴趣的读者可以先暂停在这里,思考一下这个问题的答案。
--------------剧透预警--------------
让我们对这个问题进行一步步的分析。
首先,答案为
那么
对于一般的问题来说,这个要求看起来很强甚至是不可能完成的,然而对这个特殊的问题来说,解开这把锁的钥匙就藏在标题里。
回到标题,我们不妨回顾一下逆序数的基本定义和性质。对于一个长度为
(1) 交换
(2) 交换
直观证明如下:对于 (1),交换
大部分读者可能和我一样,对逆序数唯二的接触就在于:
1) 大一上学期的线性代数(或高等代数),仅在矩阵的行列式的原始定义中用到了逆序数,然而并没有人会用原始定义去算行列式;
2) 大学前两年的编程课上,需要设计算法用
当然也有可能因为笔者本人才疏学浅的缘故,逆序数在某些领域真的发挥了很大的作用,欢迎在评论区补充。
有了逆序数和对应的性质之后,定义第
令
声明:
此时,第
两者必恰好一奇一偶(因为对序列交换了
下面证明,该策略的声明永远成立,并且保证前
假设对
此时,玩家
由于第
这道题的证明本身并不难(对北大学生甚至可以说是比较简单了)。然而,笔者做出此题花了相当长的时间。笔者也曾将这道题“迫害”给身边同学(都是很厉害的)不下10次,截至目前仅有一人成功做出。究其原因,我认为还是大家对“逆序数”的概念和用法太陌生了。
在高等代数和编程题目上,笔者并没有觉得逆序数有什么用(甚至不会觉得逆序数和高等代数有什么关联),自然不会想到将逆序数作为破题的技巧。考虑到逆序数的证明基本上是这道题最简单的证明,因此,尽管题面和证明高中生也可以看懂,但是没学过逆序数的高中生如果能够独立做出此题,很有可能会重新发现“逆序数的概念”。这可是写入大学教材的成就,对大多数博士生而言也可望不可及啊!
最后,我提出一个我认知范围内的 open question 供看到最后的读者思考:
将

文 | 马允轩
图 | 周强

— 版权声明 —
本微信公众号所有内容,由北京大学前沿计算研究中心微信自身创作、收集的文字、图片和音视频资料,版权属北京大学前沿计算研究中心微信所有;从公开渠道收集、整理及授权转载的文字、图片和音视频资料,版权属原作者。本公众号内容原作者如不愿意在本号刊登内容,请及时通知本号,予以删除。

内容中包含的图片若涉及版权问题,请及时与我们联系删除