這一章講述了估算技術,我認為是相當有用的一章。
文中先拋出一個問題:密西西比河一天流出多少水?如果讓你來回答, 你會怎么答,注意不能去Google哦。
作者是這么回答這個問題:假設河的出口大約有1英里寬和20英尺深(1/250英里), 而河水的流速是每小時5英里,也就是每天120英里。則可以計算出一天的流量:
1英里 * 1/250英里 * 120英里/天 約等于 1/2 英里^3/天
上述算式非常簡單,可是在看到這些文字之前,如果有人真的問你, 密西西比河一天流出多少水?你真的能答上來嗎?還是愣了一下后,擺擺手,說: 這我哪知道!
對于上面的問題,我們至少可以注意到以下兩點:
你需要把問題轉換成一個可計算的具體模型。這一點往往不需要太擔心, 因為我們做的是估算,所以可以忽視很多無關緊要的因素,可以去簡化你的模型, 記住我們要的只是一個粗略計算的結果。比如對于上面的問題, 計算密西西比河一天流出多少水其實就是計算其一天的流量,利用中學所學知識, 流量 = 截面積 x 流速,那我們就只需計算密西西比河的出水口的截面積和流速即可。 我們可以將出水口簡化成一個矩形,因此就只需要知道出水口的寬和深即可。
當我們懂得如何把一個問題具體化定義出來并為其選用適當的模型, 并且我們也積累了必要的常識性的知識后,回答那些初看起來無從下手的問題也就不難了。 這就是估算的力量。
以下是估算時的一些有用提示:
兩個答案比一個答案好。即鼓勵你從多個角度去對一個問題進行估算, 如果從不同角度得到的答案差別都不大,說明這個估算值是比較靠譜的。
快速檢驗。即量綱檢驗。即等式兩邊最終的量綱要一致。 這一點在等式簡單的時候相當顯而易見。比如位移的單位是米,時間單位是秒, 速度單位是米/秒,那顯然我們應該要用位移去除以時間來得到速度, 這樣才能保證它們單位的一致。你可能會說,我了個去,這種小學生都懂的事, 你好意思拿出來講。其實不然,當你面對的是一個具有多個變量的復雜物理公式, 或者你提出某種物理假設,正在考慮將其公式化,該方法可以切切實實地幫你做出檢驗。
經驗法則?!?2法則”:1.假設以年利率r%投資一筆錢y年,如果r*y = 72, 那么你的投資差不多會翻倍。2.如果一個盤子里的菌群以每小時3%的速率增長, 那么其數量每天(24小時)都會翻倍。在誤差不超過千分之五的情況下, \pi秒就是一個納世紀。也就是說:
3.14秒 = 10-9?* 100年 = 10-7?年
也就是說,1年大概是3.14x107?秒。所以如果有人告訴你,一個程序運行107?秒, 你應該能很快反應出,他說的其實是4個月。
如果問題的規(guī)模太大,我們還可以通過求解它的小規(guī)模同質問題來做估算。比如, 我們想測試某個程序運行10億次需要多長時間,如果你真去跑10億次, 說不定運行幾個小時都沒結束,那不是很悲?。课覀兛梢赃\行這個程序1萬次或是10萬次, 得出結果然后倍增它即可。當然,這個結果未必是準確的, 因為你沒法保證運行時間是隨著運行次數線性增加的。謹慎起見,我們可以運行不同的次數, 來觀察它的變化趨勢。比如運行10次,100次,1000次,10000次等, 觀察它的運行時間是否是線性增加的,或是一條二次曲線。
有時候,我們需要為估算的結果乘上一個安全系數。比如, 我們預估完成某項功能需要時間t,那根據以往經驗,也許我們需要為這個值乘上2或4, 這樣也許才是一個靠譜的預估值。
Little定律:系統中物體的平均數量等于物體離開系統的平均速率和每個物體在系統中停留 的平均時間的乘積。(如果物體離開和進入系統的總體出入流是平衡的, 那么離開速率也就是進入速率)
舉個例子,比如你正在排除等待進入一個火爆的夜總會, 你可以通過估計人們進入的速率來了解自己還要等待多長時間。根據Little定律, 你可以推論:這個地方可以容納約60人,每個人在里面逗留時間大約是3小時, 因此我們進入夜總會的速率大概是每小時20人。現在隊伍中我們前面還有20人, 也就意味著我們還要等待大約一個小時。
深入閱讀:Darrell Huff的《How To Lie With Statistics》;關鍵詞: 費米近似(Fermi estimate, Fermi problem)
更多建議: