粗略估算

2018-02-24 15:53 更新

粗略估算

這一章講述了估算技術(shù),我認(rèn)為是相當(dāng)有用的一章。

文中先拋出一個(gè)問(wèn)題:密西西比河一天流出多少水?如果讓你來(lái)回答, 你會(huì)怎么答,注意不能去Google哦。

作者是這么回答這個(gè)問(wèn)題:假設(shè)河的出口大約有1英里寬和20英尺深(1/250英里), 而河水的流速是每小時(shí)5英里,也就是每天120英里。則可以計(jì)算出一天的流量:

1英里 * 1/250英里 * 120英里/天  約等于  1/2 英里^3/天

上述算式非常簡(jiǎn)單,可是在看到這些文字之前,如果有人真的問(wèn)你, 密西西比河一天流出多少水?你真的能答上來(lái)嗎?還是愣了一下后,擺擺手,說(shuō): 這我哪知道!

對(duì)于上面的問(wèn)題,我們至少可以注意到以下兩點(diǎn):

  1. 你需要把問(wèn)題轉(zhuǎn)換成一個(gè)可計(jì)算的具體模型。這一點(diǎn)往往不需要太擔(dān)心, 因?yàn)槲覀冏龅氖枪浪悖钥梢院鲆暫芏酂o(wú)關(guān)緊要的因素,可以去簡(jiǎn)化你的模型, 記住我們要的只是一個(gè)粗略計(jì)算的結(jié)果。比如對(duì)于上面的問(wèn)題, 計(jì)算密西西比河一天流出多少水其實(shí)就是計(jì)算其一天的流量,利用中學(xué)所學(xué)知識(shí), 流量 = 截面積 x 流速,那我們就只需計(jì)算密西西比河的出水口的截面積和流速即可。 我們可以將出水口簡(jiǎn)化成一個(gè)矩形,因此就只需要知道出水口的寬和深即可。

  2. 你需要知道常識(shí)性的東西。上面我們已經(jīng)把問(wèn)題轉(zhuǎn)換成了一個(gè)可計(jì)算的具體模型: 流量 = 出水口寬 x 出水口深 x 流速。接下來(lái)呢?你需要代入具體的數(shù)值去求得答案。 而這就需要你具備一些常識(shí)性的知識(shí)了。比如作者就估計(jì)了密西西比河的出口有1英里寬, 20英尺深(如果你估計(jì)只有幾十米寬,那就相差得太離譜了)。 這些常識(shí)性的知識(shí)比第1點(diǎn)更值得關(guān)注,因?yàn)槟銦o(wú)法給出一個(gè)靠譜的估算值往往是因?yàn)檫@點(diǎn)。

當(dāng)我們懂得如何把一個(gè)問(wèn)題具體化定義出來(lái)并為其選用適當(dāng)?shù)哪P停?并且我們也積累了必要的常識(shí)性的知識(shí)后,回答那些初看起來(lái)無(wú)從下手的問(wèn)題也就不難了。 這就是估算的力量。

以下是估算時(shí)的一些有用提示:

  • 兩個(gè)答案比一個(gè)答案好。即鼓勵(lì)你從多個(gè)角度去對(duì)一個(gè)問(wèn)題進(jìn)行估算, 如果從不同角度得到的答案差別都不大,說(shuō)明這個(gè)估算值是比較靠譜的。

  • 快速檢驗(yàn)。即量綱檢驗(yàn)。即等式兩邊最終的量綱要一致。 這一點(diǎn)在等式簡(jiǎn)單的時(shí)候相當(dāng)顯而易見。比如位移的單位是米,時(shí)間單位是秒, 速度單位是米/秒,那顯然我們應(yīng)該要用位移去除以時(shí)間來(lái)得到速度, 這樣才能保證它們單位的一致。你可能會(huì)說(shuō),我了個(gè)去,這種小學(xué)生都懂的事, 你好意思拿出來(lái)講。其實(shí)不然,當(dāng)你面對(duì)的是一個(gè)具有多個(gè)變量的復(fù)雜物理公式, 或者你提出某種物理假設(shè),正在考慮將其公式化,該方法可以切切實(shí)實(shí)地幫你做出檢驗(yàn)。

  • 經(jīng)驗(yàn)法則?!?2法則”:1.假設(shè)以年利率r%投資一筆錢y年,如果r*y = 72, 那么你的投資差不多會(huì)翻倍。2.如果一個(gè)盤子里的菌群以每小時(shí)3%的速率增長(zhǎng), 那么其數(shù)量每天(24小時(shí))都會(huì)翻倍。在誤差不超過(guò)千分之五的情況下, \pi秒就是一個(gè)納世紀(jì)。也就是說(shuō):

    3.14秒 = 10-9?* 100年 = 10-7?年

也就是說(shuō),1年大概是3.14x107?秒。所以如果有人告訴你,一個(gè)程序運(yùn)行107?秒, 你應(yīng)該能很快反應(yīng)出,他說(shuō)的其實(shí)是4個(gè)月。

  • 實(shí)踐。與許多其他活動(dòng)一樣,估算技巧只能通過(guò)實(shí)踐來(lái)提高。

如果問(wèn)題的規(guī)模太大,我們還可以通過(guò)求解它的小規(guī)模同質(zhì)問(wèn)題來(lái)做估算。比如, 我們想測(cè)試某個(gè)程序運(yùn)行10億次需要多長(zhǎng)時(shí)間,如果你真去跑10億次, 說(shuō)不定運(yùn)行幾個(gè)小時(shí)都沒結(jié)束,那不是很悲劇?我們可以運(yùn)行這個(gè)程序1萬(wàn)次或是10萬(wàn)次, 得出結(jié)果然后倍增它即可。當(dāng)然,這個(gè)結(jié)果未必是準(zhǔn)確的, 因?yàn)槟銢]法保證運(yùn)行時(shí)間是隨著運(yùn)行次數(shù)線性增加的。謹(jǐn)慎起見,我們可以運(yùn)行不同的次數(shù), 來(lái)觀察它的變化趨勢(shì)。比如運(yùn)行10次,100次,1000次,10000次等, 觀察它的運(yùn)行時(shí)間是否是線性增加的,或是一條二次曲線。

有時(shí)候,我們需要為估算的結(jié)果乘上一個(gè)安全系數(shù)。比如, 我們預(yù)估完成某項(xiàng)功能需要時(shí)間t,那根據(jù)以往經(jīng)驗(yàn),也許我們需要為這個(gè)值乘上2或4, 這樣也許才是一個(gè)靠譜的預(yù)估值。

Little定律:系統(tǒng)中物體的平均數(shù)量等于物體離開系統(tǒng)的平均速率和每個(gè)物體在系統(tǒng)中停留 的平均時(shí)間的乘積。(如果物體離開和進(jìn)入系統(tǒng)的總體出入流是平衡的, 那么離開速率也就是進(jìn)入速率)

舉個(gè)例子,比如你正在排除等待進(jìn)入一個(gè)火爆的夜總會(huì), 你可以通過(guò)估計(jì)人們進(jìn)入的速率來(lái)了解自己還要等待多長(zhǎng)時(shí)間。根據(jù)Little定律, 你可以推論:這個(gè)地方可以容納約60人,每個(gè)人在里面逗留時(shí)間大約是3小時(shí), 因此我們進(jìn)入夜總會(huì)的速率大概是每小時(shí)20人?,F(xiàn)在隊(duì)伍中我們前面還有20人, 也就意味著我們還要等待大約一個(gè)小時(shí)。

深入閱讀:Darrell Huff的《How To Lie With Statistics》;關(guān)鍵詞: 費(fèi)米近似(Fermi estimate, Fermi problem)

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)