在 2048 里能够得到的最大的数是多少?

Michael Brand 在 Using your Head is Permitted 趣题站 2014 年 4 月的谜题中提出了一个这样的问题:在最近非常流行的小游戏 2048 中,你能得到的最大的数是多少?

在这里,我们简单描述一下游戏的规则。游戏在一个 4 × 4 的棋盘上进行,棋盘里填有一个个的“数块”,每个数块上都写有某个形如 2n 的正整数。每一步,你需要从上、下、左、右四个方向中选取一个方向,按下对应的方向键之后,所有的数块都会“落”到这个方向;若有两个同种的数块在此过程中发生碰撞,则它们的值会相加起来,并合成一个新的数块。然后,系统会在棋盘中随机选择一个空白位置,并在此生出一个新的数块,上面写有数字 2 或者数字 4 (两种情况之比为 9 : 1)。游戏开始时,棋盘上会自动生成两个随机的数块,你的目标就是通过有限步的操作,得出一个写有 2048 的数块。当然,即使得到了 2048 这个数块,游戏也不会自动结束,你还可以向更大的数发起挑战。于是就有了我们刚才的问题:理论上,这个游戏当中能够得到的最大的数是多少?

Read more…

通信复杂度问题:利用特殊机器判断公共元素的存在性

某个导师要和 A 、 B 两名学生玩一个游戏。导师会把 A 、 B 两名学生分别放进两间小黑屋里,每间屋子里都有一台电脑,这两台电脑之间只有一条通信线路。然后,导师会想一个正整数 n (可能会非常非常大),把它的值告诉这两名学生;再构造出集合 {1, 2, …, n} 的两个子集,分别交给这两名学生。于是,每个人都知道了 n 的值和 {1, 2, …, n} 的一个子集。两人需要合作确定出,他们手中的集合是否包含公共的元素。他们之间交流信息的唯一途径就是那条通信线路,但他们能够使用的流量是有限的。具体能够使用多少 bit 的流量,这可以由他们自己决定,但必须在游戏开始之前(也就是 n 的值确定之前)就定好并告诉导师。

和其他类似的问题一样,在游戏开始之前,两人可以商量一个对策。不过,这一回,两人商量了很久,始终无法找到一个必胜的对策。就在两人快放弃的时候,他们突然发现,两人的通信线路上存在一个“漏洞”:两人都可以不计流量地访问一台特殊的第三方机器,我们不妨把它叫做机器 O 。不过,机器 O 只能做一件事情:从 A 那儿读取一个 1 到 n 的排列,从 B 那儿读取一个 1 到 n 的排列,然后计算出这两个排列复合之后是否恰好含有一个循环,并将计算结果分别告知 A 和 B 。然后,机器 O 就会自动关机,再也不能访问了。也就是说,A 和 B 只能使用机器 O 一次。注意, A 、 B 两人是无法看到对方传给机器 O 的数据的,另外机器 O 只能用于处理 1 到 n 之间的排列,不能处理其他大小的排列。

Read more…