有一根不均匀的绳子,烧完正好需要 1 个小时。如何用这根绳子测出半个小时的时间呢?答案很巧妙:把这根绳子的两头同时点燃,绳子烧完时正好就过了半个小时。更妙的是下面这个加强版:如何用两根这样的绳子来计时 45 分钟?答案是,把其中一根绳子的两头都点燃,同时点燃另一根绳子的其中一头;待到前一根绳子烧完之后,再把第二根绳子的另一头也点燃,于是便能测出 30 + 15 = 45 分钟了。
一个有趣的问题自然而然地产生了:假如这样的绳子足够多,哪些时间能够用烧绳子的方法测出来呢?
为了解决这一问题,让我们先把这个问题本身理清楚——“烧绳子测量时间”的“游戏规则”究竟是什么?首先,一根绳子(的任意一头)可以在第 0 时刻或者另外某根绳子烧完的瞬间点燃。另外我们假设,在同一时刻,我们可以同时点燃任意多根绳子。而由此测出的时间段则定义为从点燃第一根绳子到最后一根绳子烧完的总时间。
用形式化的语言来描述,如果绳子两端分别在第 a 时刻和第 b 时刻点燃(其中 |a – b| < 1 ),那么绳子最终将在 (a + b + 1)/2 时刻烧尽。我们说某个时间点 x 是可以到达的,当且仅当存在两个可以到达的时间 a 、 b ,使得 x = (a + b + 1)/2 。显然,第 0 时刻是可以到达的。从第 0 时刻出发,不断用 (a + b + 1)/2 进行迭代,我们就能得到所有能够测出的时间了。
可以看到,随着迭代次数的增加,能够测量的时间越来越多,也越来越精确;不过,时间一去不复返,有些时间还是无法测量,绳子再多也没法弥补。