《编程珠玑》第 7 章──粗略估算

「粗略估算」在工程院校中时标准课程,对多数从业工程师来说则是谋生的必备技能。

基本技巧

  1. 两个答案比一个答案好。也就是说要做检验。
  2. 快速检验。注意量纲的统一,更不要忘记了常识性的东西。
  3. 经验法则。「72 法则」是说:假设以年利率 $r$% 投资一笔钱 $y$ 年,如果 $r\times y = 72$ ,那么你的投资差不多会翻倍。
  4. 实践。多做多想。

Little 定律

队列中物体的平均数量为进入速率与平均停留时间的乘积。

习题

1

While Bell Labs is about a thousand miles from the mighty Mississippi, we are only a couple of miles from the usually peaceful Passaic River. After a particularly heavy week of rains, the June 10, 1992, edition of the Star-Ledger quoted an engineer as saying that “the river was traveling about 200 miles per hour, about five times faster than average”. Any comments?

每小时 200 英里,相当于 $\frac{1}{3}$ 的音速。而且平均速度每小时 40 英里也不大可能,一般为每小时 2 英里。

2

At what distances can a courier on a bicycle with removable media be a more rapid carrier of information than a high-speed data line?

送信人的带宽时很大的,比如带上 100 个 64 G 容量的 U 盘,只要把数据增大来,人肯定会比数据线快的。有些实验室从某些公司拷数据,都是直接搬运硬盘过来。

3

How long would it take you to fill a floppy disk by typing?

常用的软盘就是容量为 1.44MB 的 3.5 英寸软盘。假如输入英文,每分钟 300 个字符,每个字符一个字节,那么大概需要 83 小时。

$$
1.44 \times 1024 \times 1024 \div 300 \div 60 = 83\ \text{(hours)}
$$

4

Suppose the world is slowed down by a factor of a million. How long does it take for your computer to execute an instruction? Your disk to rotate once? Your disk arm to seek across the disk? You to type your name?

我的 MBP 的 CPU 频率大概是 3GHz,也就是 $3\times 10^9$Hz,如果缩小到百万分之一,那么就是 3KHz。执行一条执行大概需要 0.3ms。磁盘是 7200转/分钟,会变成 0.0072 转/分钟,一圈的话需要 2 小时。输入中文,一般是 80个/分钟,那么三个字大概需要 2 秒,如果变成百万分之一,那么需要 555 小时。

5

Prove why “casting out nines” correctly tests addition. How can you further test the Rule of 72? What can you prove about it?

如果构成某数的各位数字之和能被 9 整除,则这个数本身也能被 9 整除。如果构成某个数的各位数字之和不能被 9 整除,则这个数本身也不能被 9 整除,其所得余数与构成其数的数字和的余数相同。

假设有个三位数 XYZ,百位数是 X,十位数是Y,个位数是Z。那么这个数可以记为 100*X + 10*Y + Z,各位数字之和为 X + Y + Z

$$
\begin{equation}\begin{split}
\left(100X+10Y+Z\right)\mod 9 &= \left[\left(99+1\right)X + \left(9+1\right)Y + Z\right]\mod 9\\
&=\left[\left(99X+9Y\right)+\left(X+Y+Z\right)\right]\mod 9\\
&=\left(X+Y+Z\right)\mod 9
\end{split}\end{equation}
$$

假设现在的值为 PV,将来的值为 FV,r 为年利率,y 为期数。因为将来值翻倍,所以 FV=2PV。

$$
\text{FV} = \text{PV}\times \left(1 + r\right)^y
$$

代入 FV=2PV 后,

$$
\begin{equation}\begin{split}
2 = \left(1+r\right)^y\\
y = \ln 2 \div \ln \left(1+r\right)\\
\ln 2 \approx 0.693127\\
y \approx 0.693147 \div r
\end{split}\end{equation}
$$

6

A United Nations estimate put the 1998 world population at 5.9 billion and the annual growth rate at 1.33 percent. Were this rate to continue, what would the population be in 2050?

按照 72 法则,1.33% 的增长率需要 54 年可以翻倍,2050 年应该有 120 亿人。

9

Suppose that a system makes 100 disk accesses to process a transaction (although some systems need fewer, some systems require several hundred disk accesses per transaction). How many transactions per hour per disk can the system handle?

一个 7200 rpm 的硬盘的 iops 大概为 100 个,如果每次事物的数据量可以在一次 io 中完成,那么每个事物就要花费 1s,一小时就可以完成 3600 个事务。

11

[P. J. Denning] Sketch a proof of Little’s Law.

第 5 题中已经证明了。

12

You read in a newspaper article that a United States quarter-dollar coin has ``an average life of 30 years’’. How can you check that claim?

随机抽样来验证即可。