web.py

The web.py slogan is: “Think about the ideal way to write a web app. Write the code to make it happen.”

This is literally how I developed web.py. I wrote a web application in Python just imagining how I wanted the API to be.

— The web.py Philosophy

— Aaron Swartz

2013.01.25 Friday ACHK

Writing and Speaking

I’m not a very good speaker. I say “um” a lot. Sometimes I have to pause when I lose my train of thought. I wish I were a better speaker. But I don’t wish I were a better speaker like I wish I were a better writer. What I really want is to have good ideas, and that’s a much bigger part of being a good writer than being a good speaker.

Having good ideas is most of writing well. If you know what you’re talking about, you can say it in the plainest words and you’ll be perceived as having a good style. With speaking it’s the opposite: having good ideas is an alarmingly small component of being a good speaker.

I first noticed this at a conference several years ago. There was another speaker who was much better than me. He had all of us roaring with laughter. I seemed awkward and halting by comparison. Afterward I put my talk online like I usually do. As I was doing it I tried to imagine what a transcript of the other guy’s talk would be like, and it was only then I realized he hadn’t said very much.

— Writing and Speaking

— March 2012

— Paul Graham

2013.01.25 Friday ACHK

考慮次序與否 2.1

這段改編自 2010 年 6 月 15 日的對話。

初學機會率的其中兩個最大難處是,要釐清「什麼時候要考慮次序」和「怎樣為之『相同情況』」,例如:

我們再考慮另一個例子:

有一個袋子,內裡有十張卡紙。每張卡紙上,都寫上了一個英文字母。那十個字母分別是「AAABBBCCCC」,即是三個 A、三個 B 和 四個 C。你將要抽其中三個字母出來。被抽出來的卡紙,不會放回袋中。

假設整個過程是隨機的,即是各個可能性的機會均等。問題是,你抽中「兩 A 一 B」的機會率是多少?

P 方法:

總共要抽三個字母:

(_)(_)(_)

抽第一個時,總共有十個字母,而你想要的 A,則有三個。所以,第一個機會率分數是十分之三(3/10)。

(3/10)(_)(_)

抽第二個時,總共餘下九個字母,而你想要的 A,則還有兩個。所以,第二個機會率分數是九分之二(2/9)。

(3/10)(2/9)(_)

最後,總共餘下八個字母,而你想要的 B,則有三個。所以,第三個機會率分數是八分之三(3/8)。

(3/10)(2/9)(3/8)

暫時的結論是,抽到 A A B 的機會率是 1/40。

(3/10)(2/9)(3/8)

= 1/40

在用「S 方法」驗算前,我們先考慮,我們需不需要,再額外考慮「次序問題」呢?

需要,因為剛才那幾個機會率分數,只包括了 A A B,即是「頭兩個是 A 而最尾一個是 B」的情況。那並不是題目的設定。題目並沒有要求三個之中,哪一個是 B。所以,還有其他情況需要考慮:

(A)(A)(B)

(A)(B)(A)

(B)(A)(A)

(HYC:這一題很明顯是只有三種情況。但是,當題目不是那麼簡單,數字不是那麼小,而是要我選(例如)「四 C 三 A」時,我怎樣保證,可以羅列所有相關的情況,沒有遺漏?)

你可以這樣想:

(_)(_)(_)

三格之中,你要放一個是 B,有多少方法呢?

很明顯,有 3_C_1 種可能。3_C_1 即是「3 選 1」,等於 3。所以,你只要將剛才的中途結果乘以 3,就可以得到最終答案。

(3/10)(2/9)(3/8)3_C_1

=(1/40)3

= 3/40

結論是,抽到「兩 A 一 B」的機會率是 3/40。

(HYC:我明白為何共有 3_C_1 種情況。但是,我不明白,為何只要將 3_C_1 乘上其中一個案例的機會率,就可以得到整體的機會率。)

你的憂慮是合理的。實情是,那 3_C_1 種情況,是三種不同的處境,需要各自計算,然後把它們相加,來得出整體的機會率。

(A)(A)(B)=(_)(_)(_)

(A)(B)(A)=(_)(_)(_)

(B)(A)(A)=(_)(_)(_)

剛才運算過,「(A)(A)(B)」的機會是 1/40。

(A)(A)(B)=(3/10)(2/9)(3/8)= 1/40

(A)(B)(A)=(_)(_)(_)

(B)(A)(A)=(_)(_)(_)

而第二種情況「(A)(B)(A)」,抽到第一張是 A 的機會是 3/10,因為十張卡紙中,有三張是 A;抽第二張是 B 的機會是 3/9,因為餘下的九張卡紙中,有三張是 B;抽第三張是 C 的機會是 2/8,因為餘下的八張卡紙中,還剩兩張是 A。

(A)(A)(B)=(3/10)(2/9)(3/8)= 1/40

(A)(B)(A)=(3/10)(3/9)(2/8)

(B)(A)(A)=(_)(_)(_)

類似地,第三種情況「(B)(A)(A)」的機會是(3/10)(3/9)(2/8)。

(A)(A)(B)=(3/10)(2/9)(3/8)= 1/40

(A)(B)(A)=(3/10)(3/9)(2/8)

(B)(A)(A)=(3/10)(3/9)(2/8)

理論上,三種情況要各自計算,從而會有三道不同的算式。但是實際上,你會發覺三道不同算式,會有相同的結果,都是 1/40。

(A)(A)(B)=(3/10)(2/9)(3/8)= 1/40

(A)(B)(A)=(3/10)(3/9)(2/8)= 1/40

(B)(A)(A)=(3/10)(3/9)(2/8)= 1/40

所以,剛才的講法「只要把『(A)(A)(B)』的機率乘以 3_C_1,就可以得以整體結果」,雖然概念上「有點不負責任」,但實際上,會得到正確的最終答案。

還有,很多時候,那是必須的捷徑。例如,如果題目問你「從『AAABBBCCCC』中,抽出七個字母,抽到『兩 A、兩 B 和 三 C』的機會是多少」,你就總共有 210 種情況要各自考慮、個別運算,除非你願意使用捷徑。

— Me@2013.01.24

致讀者:如發現本文有思考漏洞,或者運算錯誤,請以電郵告知本人。謝謝!

— Me@2012.10.17

2013.01.25 Friday (c) All rights reserved by ACHK