有一個12品脫(pint)的酒瓶,裏面裝滿葡萄酒,另有8品脫和5品脫的瓶子各一個。問如何從中分出6品脫的酒出來? spa
傳說泊松年輕時成功解決了該問題,勾起了他對數學的興趣而投身數學研究,所以該問題被稱爲泊松分酒問題。另外這個問題又被稱爲分油問題啦,分水問題啦等等。 ci
小學的時候在一本《十萬個問什麼——數學卷》中看到過這個問題,那本書直接給出了一個解答過程,又沒說原理,看得我糊里糊塗。 數學
一 . 解答過程 table
爲了方便說明,將容量爲12品脫,8品脫,5品脫瓶子分別稱爲大瓶子,中瓶子,小瓶子。按照下面2種規則中的如何一種能夠解決這個問題: 原理
第一套規則: tab
1. 大瓶子只能倒入中瓶子 di
2. 中瓶子只能倒入小瓶子 ab
3. 小瓶子只能倒入大瓶子 系統
4. 小瓶子只有在已經裝滿的狀況下才能倒入大瓶子
5. 若小瓶子被倒空,則不管中瓶子是否滿,應立刻從中瓶子倒入小瓶子
之因此要規定倒酒的順序是爲了防止狀態重複。而根據這5條規則,大瓶子每次倒入中瓶子的酒老是8品脫,小瓶子每次倒入大瓶子的酒老是5品脫。(請結合下面的表來理解這句話,理解這點很重要)
有了上面的規定後,倒酒的順序就肯定下來了:
12品脫瓶子 | 8品脫瓶子 | 5品脫瓶子 | |
12 | 0 | 0 | 初始狀態 |
4 | 8(倒進) | 0 | |
4 | 3 | 5(倒出) | |
9 | 3 | 0 | |
9 | 0 | 3 | |
1 | 8(倒進) | 3 | |
1 | 6 | 5(倒出) | 搞到6品脫了 |
6 | 6 | 0 | 完成 |
第二套規則:
1. 大瓶子只能倒入小瓶子
2. 小瓶子只能倒入中瓶子
3. 中瓶子只能倒入大瓶子
4. 中瓶子只有在已經裝滿的狀況下才能倒入大瓶子
5. 若中瓶子被倒空,則不管小瓶子是否滿,應立刻將小瓶子倒入中瓶子
其實只是將第一套規則中的「中」和「小」兩個字對換了一下。
根據這個規則肯定的倒酒的順序以下(注意,我將8品脫和5品脫的位置交換了一下):
12品脫瓶子 | 5品脫瓶子 | 8品脫瓶子 | |
12 | 0 | 0 | |
7 | 5(倒進) | 0 | |
7 | 0 | 5 | |
2 | 5(倒進) | 5 | |
2 | 2 | 8(倒出) | |
10 | 2 | 0 | |
10 | 2 | 2 | |
5 | 5(倒進) | 2 | |
5 | 0 | 7 | |
0 | 5(倒進) | 7 | |
0 | 4 | 8(倒出) | |
8 | 4 | 0 | |
8 | 0 | 4 | |
3 | 5(倒進) | 4 | |
3 | 1 | 8(倒出) | |
11 | 1 | 0 | |
11 | 0 | 1 | |
6 | 5(倒進) | 1 | 搞到6品脫了 |
6 | 0 | 6 | 完成 |
二. 原理
設大,中,小三個瓶子容量分別是C1,C2,C3,須要倒出的容量是R
則實際上要是咱們能將容量爲R的酒倒到中瓶子和小瓶子中就能夠啦(有點廢話)
設大瓶子倒滿中瓶子X次,從小瓶子中倒入大瓶子Y次。
那麼顯然由大瓶子累次倒入中瓶子和小瓶子總共C2*X的酒。而由小瓶子倒入大瓶子一共有C3*Y的酒。
那麼最終,小瓶子和中瓶子剩餘的酒顯然就是 C2*X - C3*Y
所以,泊松分酒問題實質上轉化爲下面的不定方程是否有正整數解的問題:
C2*X - C3*Y = R
對於咱們的問題,
C1=12,C2=8,C3=5,R=6
第一種倒酒規則實質上至關於解下面這個不定方程:
8X - 5Y = 6 ( 限定 X > 0 ,Y > 0 )
最小整數解是 X=2,Y= 2
表示倒滿8品脫的瓶子2次,5品脫的瓶子倒空2次
那麼8品脫的瓶子和5品脫的瓶子剩酒總量必然是 8 * 2 – 5 * 2 = 6
第二種倒酒規則實質上至關於解下面的不定方程:
5X - 8Y = 6 ( 限定 X > 0 , Y > 0 )
最小整數解是 X = 6 ,Y= 3
表示倒進5品脫瓶子6次,從8品脫瓶子中倒出3次
那麼最終5品脫和8品脫的瓶子剩酒總量必然是 5 * 6 – 8 * 3 = 6
好了,如今你明白爲何要規定倒酒的順序了吧。小瓶子和中瓶子是一個系統,而大瓶子又是另一個系統,大瓶子的酒只能倒入中瓶子和小瓶子組成的系統,小瓶子的酒只能倒出到大瓶子的系統。咱們關注的是由中瓶子和小瓶子組成的系統,這個系統每次增長都是8品脫(中瓶子容量),每次減小都是5品脫(小瓶子容量)。
另外,若是存在X和Y,使得下面的方程有解:
C2*X - C3*Y = 1
實質上就是說可以倒出1品脫的酒,那麼任意品脫的酒都能倒出了。
由於:
(C2*X - C3*Y)*N = N