趣题:怎样向别人证明两个图不同构?

若干个顶点(vertex)以及某些顶点对之间的边(edge)就构成了一个图(graph)。如果图 G 和图 H 的顶点数相同,并且它们的顶点之间存在着某种对应关系,使得图 G 中的两个顶点之间有边,当且仅当图 H 中的两个对应顶点之间有边,我们就说图 G 和图 H 是同构的(isomorphism)。直观地说,两个图是同构的,意思就是它们本质上是同一个图,虽然具体的画法可能不一样。下面的两个图就是同构的。其中一种顶点对应关系是: 1 – a, 2 – c, 3 – d, 4 – b, 5 – e, 6 – g, 7 – h, 8 – f 。

目前,人们还没有找到任何高效的算法,能迅速判断出两个图是否同构。在普通计算机上,判断两个图是否同构,这需要花费大量的时间。因此,人们经常以图的同构为例,来解释复杂度理论和现代密码学中的诸多概念。

假设你家里的计算机十分强大,能很快判断出两个图是否同构,还能在两个图确实同构的情况下,给出一种顶点对应关系。但你的同桌家里的计算机却非常弱,没法做什么大型运算。课堂上,老师向全班展示了两个很复杂的图,不妨把它们叫作图 G 和图 H 。老师布置了一个特别的选做题:判断出这两个图是否同构。每个同学都可以提交答案,答案里只需要写“是”或者“不是”即可。按时提交答案并答对者,期末考试会获得 5 分加分;按时提交答案但答错了的,期末考试成绩将会倒扣 30 分;不参与此活动的同学,期末考试既不加分也不扣分。显然,每个同学都不敢随意提交答案,除非百分之百地能保证自己获得的答案是正确的。回到家后,借助家里的超级计算机,你很快判断出了这两个图是同构的。你给你的同桌发送了信息:“我已经算出来了,这两个图是同构的。”但是,你的同桌却回复说:“你不会是骗我的吧?”你打算怎样说服他,这两个图确实是同构的呢?

Read more…

趣题:用四个数学运算符号译出 EBCDIC 编码

ASCII 编码已经是非常直观了。 65 号字符就是大写字母 A , 66 号字符就是大写字母 B ,以此类推, 90 号字符就是大写字母 Z 。为了看出某个编码究竟对应字母表中的第几个字母,我们只需要用下面的函数关系即可:

f(x) = x - 64

整个函数关系极其简单,里面只包含一个数学运算符号。

当然,历史上也出现过很多非常不直观的字符编码方式。 EBCDIC 是由 IBM 提出的一种字符编码标准,它的编码方式十分古怪,可害苦了当年的那些程序员。据说,当年的程序员没有一个不痛恨 EBCDIC 的。因此, EBCDIC 也理所当然地成为了众人调侃的对象。 Wikipedia 上的 EBCDIC 页面甚至还专门有一节,讲述各种与 EBCDIC 有关的笑话。有一个经典的笑话说的就是,美国政府跑去 IBM ,想要研发一种数据加密标准,于是 EBCDIC 编码就诞生了。经典游戏 Zork 中, EBCDIC 也被用来形容艰涩难懂的文字:

一个大房间里,各式各样笨重的机器在呼呼作响,电阻烧焦了的味儿扑鼻而来。其中一面墙上有三个按钮,形状分别是圆形、三角形和正方形。自然,这些按钮上方的说明文字都是用 EBCDIC 书写的……

Read more…

UyHiP 趣题:出现次数最多的诱导子图

下面这道题目是 Using your Head is Permitted 谜题站 2015 年 12 月的题目

若干个顶点(vertex)以及某些顶点对之间的边(edge)就构成了一个图(graph)。下面就是这篇文章里会用到的四个图。其中,第一个图是由 2 个顶点组成的路径(path),因而我们把它称作 P2 ;第二个图是由 3 个顶点组成的路径,因而我们把它称作 P3 。第三个图是由 3 个顶点组成的一个环(cycle),因而我们把它称作 C3 ;第四个图是由 4 个顶点组成的一个环,因而我们把它称作 C4

选取图中的一个或多个顶点,同时选出这些顶点之间的所有边,得到的就是原图的一个“诱导子图”(induced subgraph)。在这篇文章中,我们只考虑那些连通的诱导子图。下面是一个有 6 个顶点的图,右边则列出了由它可以产生出来的所有连通诱导子图。注意,由于有些诱导子图不是连通的(比如只选择正上方的两个点和右下角的两个点,或者干脆只选择最左边那个点和最右边那个点),因而它们并没有在右边列出。在这些连通诱导子图里,很多图的本质都是相同的。比方说,第一行最后三个图和第二行前面四个图的本质是一样的,它们都是刚才我们介绍过的 P2 。当然,第一行的前六个图的本质也都是一样的,即由单个顶点构成的图,有时会被人们记作 K1 。观察最后一行的倒数第二个和倒数第三个图,你能看出这两个图的本质也一样吗?只不过,它们就没有什么固定的名字了。在这些连通诱导子图里,哪一种图出现的次数最多呢?答案就是 P3 ,它一共出现了 8 次。

我们的问题是:能否构造一个图,使得里面出现次数最多的连通诱导子图是 C3 ?能否构造一个图,使得里面出现次数最多的连通诱导子图是 C4 ?注意,如果两种连通诱导子图出现的次数一样多,那它们都不算出现次数多的连通诱导子图。

Read more…

让你看到函数图象在无穷远处的样子

y = x2 似乎把 y = x 远远地甩在了后面,但为何当 x 无穷大时,二者能同时到达无穷?当 x 从有限大变为无限大时, 1 / x 的函数值是怎样慢慢变成 0 的? y = ex, y = xx, y = x! ,谁的函数值最先接近无穷? y = ln x, y = x · ln x, y = √x ,谁的函数值最后接近无穷?下面这个有趣的方法能直观地展示出函数图象在无穷远处的样子,进而回答刚才这些看似毫无意义的问题。

当 x 从 -π/2 连续地增加到 π/2 时, x 的正切值将会从负无穷连续地增加到正无穷。因此,为了展示出 y = f(x) 在无穷远处的样子,我们可以画出 tan(y) = f(tan(x)) 在 (-π/2, π/2) × (-π/2, π/2) 上的图象,也就是 y = arctan(f(tan(x))) 在 (-π/2, π/2) × (-π/2, π/2) 上的图象。最后得到的结果是什么样的呢?让我们一起来看看吧。

Read more…

怎样把一个立方体分成 54 个小立方体?

大家或许都听说过一个与正方形剖分相关的非常经典的问题:对于哪些正整数 n ,我们可以把一个正方形分割成 n 个小正方形(允许出现大小相同的小正方形)?答案是,除了 n = 2, 3, 5 以外,对于其他所有的 n ,把一个正方形分割成 n 个小正方形都是有可能的。对于 n = 1, 4, 6, 7, 8 的情况,分割方案如下图所示:

对于更大的 n 呢?注意到,每次用横竖两条线把一个小正方形分成四个更小的小正方形后,我们都会让这个图形里的正方形数目增加 3 个。因此,我们只需要在 n = 6 的方案上增加两笔,就能得到一个 n = 9 的方案;只需要在 n = 7 的方案上增加两笔,就能得到一个 n = 10 的方案;只需要在 n = 8 的方案上增加两笔,就能得到一个 n = 11 的方案;只需要在 n = 9 的方案上增加两笔,就能得到一个 n = 12 的方案……于是,其他所有的情况都被我们解决了。

Read more…