標籤:演算法
很小的時候就看到了這麼一個故事。
相傳古印度有一位老人,臨終前留下遺囑,把所養的19頭牛分給3個兒子。大兒子分得二分之一,老二分得四分之一,小兒子分得五分之一。按印度教規,牛被視為神靈,不能被宰殺,而父親的遺囑須無條件遵守。按老父親的遺囑,大兒子分得的牛數為:19/2=9.5,二兒子分得:19/4=4.75頭,小兒子分得19/5=3.8頭牛。老人死後,三位兒子一籌莫展。[1]
還記得那時候是三年級,看書已知道答案,就是大家熟悉的借牛法,即:向其他的人借一頭牛,加在一起共有20頭,大兒子分得20/2=10頭牛,二兒子分得20/4=5頭牛,小兒子分得20/5=4頭牛,共分得10+5+4=19頭牛,將剩下的一頭牛還給別人。當時剛好來了一個非常年輕,非常帥氣的數學老師,一向心高氣傲的我想考考這位老師的數學水平,於是將這道題問他。這位老師一節課後將我叫到了辦公室,認真的給我解釋怎麼分牛,當時心中還是挺佩服他的。
雖然早已知道答案,但心中一直有一事不明,10頭牛並不是19的二分之一,為何算是正確答案呢?直到昨天,我才明白其中的奧秘。
解釋一。
注意到,1/2+1/4+1/5=19/20,也就是說,三個兒子第一次分得的牛加起來其實並不是所有牛。假設所有牛為1,則還剩下1-19/20=1/20,按照老人的遺囑,剩下的1/20的牛也應該讓大兒子分得二分之一,老二分得四分之一,小兒子分得五分之一,此時還剩下1/20-1/20*(1/2+1/4+1/5)=1/(20*20),如此不斷的分下去,那麼,分得的牛數情況如下:
大兒子:19*(1/2+1/2*1/20+1/2*1/(20*20)+...)=19/2*(1+1/20+1/(20*20)+...)
二兒子:19*(1/4+1/4*1/20+1/4*1/(20*20)+...)=19/4*(1+1/20+1/(20*20)+...)
小兒子:19*(1/5+1/5*1/20+1/5*1/(20*20)+...)=19/5*(1+1/20+1/(20*20)+...)
1, 1/20, 1/(20*20), ... 是一個極限等比數列,根據等比數列公式:Sn=a1*(1-qn)/(1-q),可知
1+1/20+1/(20*20)+...=1*(1-(1/20)n)/(1-1/20), n->無窮大=20/19
因此,最終的分配方案為:
大兒子:19/2*20/19=10
二兒子:19/4*20/19=5
小兒子:19/5*20/19=4
解釋二。
大兒子分得二分之一,老二分得四分之一,小兒子分得五分之一,可以看成他們的分配比例。
大兒子:二兒子:小兒子=1/2:1/4:1/5=10:5:4,因此三個兒子最終獲得的牛數為:
大兒子:19*10/(10+5+4)=10
二兒子:19*5/(10+5+4)=5
小兒子:19*4/(10+5+4)=4
[1] 周穎, 程式員的數學思維修鍊, 清華大學出版社, P150
轉載請註明:康瑞的部落 ? 智叟分牛
智叟分牛