1. 程式人生 > >斐波那契博弈證明

斐波那契博弈證明

斐波那契博弈

有一堆個數為n的石子,遊戲雙方輪流取石子,滿足:
1)先手不能在第一次把所有的石子取完;
2)之後每次可以取的石子數介於1到對手剛取的石子數的2倍之間(包含1和對手剛取的石子數的2倍)。
約定取走最後一個石子的人為贏家,當n為斐波那契數時,先手必敗;否則先手必勝。

1. 證明n為斐波那契數時,先手必敗:

假設如今有 n n 個石子,分成兩堆,有 n

= f [ k ] + f [ k 1
] n=f[k]+f[k-1] ,兩堆數目是相鄰的斐波那契數。如今先手先取。設先手為 a a ,後手為 b b

  • a &lt; f [ k 1 ] 3 a &lt; \frac{f[k-1]}3 時: b &lt; 2 f [ k 1 ] 3 b &lt; \frac{2f[k-1]}3 ,此時 ( a + b ) (a+b) < f [ k 1 ] f[k-1] ,先手後手都沒能將 f [ k 1 ] f[k-1] 堆取完。經過這一輪,還是剩下兩堆石子,又回到原來的問題。a如果想贏的話,必然想要一下子取完剩下的 f [ k ] f[k] ,也就要求 b b 取的儘量多,這種取的方法不是每次取的最優策略。
  • a = f [ k 1 ] 3 a = \frac{f[k-1]}3 時:
    - 如果 b b < 2 f [ k 1 ] 3 \frac{2f[k-1]}3 ,此時仍有 ( a + b ) (a+b) < f [ k 1 ] f[k-1] ,還是回到原來的問題。
    - 如果 b b = 2 f [ k 1 ] 3 \frac{2f[k-1]}3 ,則 ( a + b ) (a+b) = f [ k 1 ] f[k-1] f [ k 1 ] f[k-1] 堆被取完。接下來該先手取, a a 最多為 4 f [ k 1 ] 3 \frac{4f[k-1]}3 。那麼接下來證明a的最大值小於剩下的石子數目的大小: 4 f [ k 1 ] 3 f [ k ] = 4 f [ k 1 ] 3 f [ k ] = 4 f [ k 1 ] 3 ( f [ k 1 ] + f [ k 2 ] ) = 4 3 ( 1 + f [ k 2 ] f [ k 1 ] ) &lt; 1 \frac{\frac{4f[k-1]}3}{f[k]}=\frac{4f[k-1]}{3f[k]}=\frac{4f[k-1]}{3(f[k-1]+f[k-2])}=\frac{4}{3(1+\frac{f[k-2]}{f[k-1]})}&lt;1 即:
    f [ k 1 ] = f [ k 2 ] + f [ k 3 ] &lt; 3 f [ k 2 ] f[k-1]=f[k-2]+f[k-3]&lt;3f[k-2]
    f [ k 3 ] &lt; 2 f [ k 2 ] = 2 f [ k 3 ] + 2 f [ k 4 ] f[k-3]&lt;2f[k-2]=2f[k-3]+2f[k-4]
    0 &lt; f [ k 3 ] + 2 f [ k 4 ] 0&lt;f[k-3]+2f[k-4]
    該式恆成立,即 a m a x = 2 b = 4 f [ k 1 ] 3 &lt; f [ k ] a_{max}=2b=\frac{4f[k-1]}{3}&lt;f[k] ,所以此時先手不能取完 f [ k ] f[k] 。在不回到原來問題的條件下, f [ k ] f[k] 堆剩下的石子一定被後手,也就是 b b 取完,一定是先手敗,因為先手(即 a a )取不完當前的堆。
  • f [ k 1 ] 3 &lt; a &lt; f [ k 1 ] \frac{f[k-1]}3 &lt; a &lt; f[k-1