点燃绳子究竟还能测出哪些时间?
有一根不均匀的绳子,烧完正好需要 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 进行迭代,我们就能得到所有能够测出的时间了。
可以看到,随着迭代次数的增加,能够测量的时间越来越多,也越来越精确;不过,时间一去不复返,有些时间还是无法测量,绳子再多也没法弥补。
如果绳子充分多,能够测量的时间精确得吓人。最小的可测时间是 0 + 2^(-1) ,在时刻 1 之后最小的可测时间则是 1 + 2^(-3) ,超过 2 但最接近 2 的可测时间则是 2 + 2^(-10) 。
那么,在 3 之后最接近 3 的可测时间是 3 加上 2 的负多少次方呢?答案是 2 的 负 1 541 023 937 次方,可见烧绳子测量时间理论上有多精确。序列 1, 3, 10, 1 541 023 937 的增长速度之惊人,甚至可以说已经超过了指数级增长。那么,序列的下一项有多大呢?这个下一项真的可以说是大到难以想象了。即使说它有多少位,或者它的位数有多少位,也不能描述出它的大小。这个数必须用一些特殊的数学记号来表示,它大到甚至可以和 Graham 数 相提并论。
具体的一些结果还可以看这里:
http://mathpuzzle.com/fusible.pdf
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:Matrix67 来源: Matrix67: My Blog
- 标签: Graham 测量 绳子
- 发布时间:2011-01-19 22:10:27
- [54] IOS安全–浅谈关于IOS加固的几种方法
- [52] android 开发入门
- [52] 如何拿下简短的域名
- [51] 图书馆的世界纪录
- [49] Oracle MTS模式下 进程地址与会话信
- [49] Go Reflect 性能
- [47] 【社会化设计】自我(self)部分――欢迎区
- [46] 读书笔记-壹百度:百度十年千倍的29条法则
- [37] 程序员技术练级攻略
- [29] 视觉调整-设计师 vs. 逻辑