從抽火柴的問題思考中去 如何從結論推導條件

2021-06-10 02:58:23 字數 1748 閱讀 3568

看了劉未鵬的文章《跟波利亞學解題》之後關於解題方法的一些想法。

這篇文章提到了我們從小大到看到的數學書上無一不是歐幾里得方式定義的:從定義到定理,再到推論。是屬於「順流而下」式的。但這樣的書其實完全扭曲了數學的發現過程。所以作者推薦我們去看波利亞的書《how to solve it》中的啟發思考方法。劉未鵬自己也總結出了以下幾點:

1. 時刻不忘未知量

2. 用特例啟發思考

3. 反過來推導(歸約)

4. 試錯(這是大部分人一拿到題目都會嘗試的方法)

5. 調整題目條件

6. 求解乙個類似的問題

7. 列出所有跟問題有關的定理或者性質(這是我們高中解數學題常用的方法)

8. 考察反面,考察其他的情況

9. 將問題泛化,並求解這個泛化後的問題

其中我對第三點印象比較深刻,就是如何運用反過來推導的思維。意思就是從題目要得出的結論本身去推導一些對我們解題有用的推論,無論這個推論是充分的還是必要的。如果這個推論是充要的,那我們就將問題進行了一次「雙向」規約,如果原問題不容易解決,那麼可能推論的問題容易解決。即使得到的推論是必要而非充分的,那我們也可以知道——任何不滿足這個推論的解都不是原問題的解。

我們可以用這個方法來嘗試解決一下抽火柴的問題。問題描述如下:

100根火柴,兩個人輪流取,每個人每次只能取1~7根,誰拿到最後一根火柴誰贏;問有必勝策略嗎,有的話是先手還是後手必勝?

如果按照正常的思維習慣,我們會從條件入手,不斷的進行試錯。但是這個問題如果使用這個方法,我們會感覺無從下手,因為問題的整個解的搜尋空間會很大。但如果我們先從要求解的結論入手就會感到容易很多。

我們先假設存在必勝的策略,如果我們最後給對手留下了1,2.....7根火柴的話,對手可以一次性的拿走所有的火柴,那對手可以獲勝。但如果我們給對手留下8根火柴,我們可以發現,無論下一次對手如何取火柴,我們都可以把留下的火柴一次性取走,那麼我們一定可以獲勝。從這裡我們可以知道8是乙個分界點!接著我們再思考給對手留下9,10,.......15根火柴,如果對手足夠聰明,那他一定會拿走一些火柴(如果剩9,那麼他就拿1根;如果剩下10,他就拿2根;依此類推),只剩下8跟火柴,那這個時候我們就陷入了必輸的狀態當中了。如果我們給對手留下16根火柴,假設對手取走x根火柴(1<=x<=7),我們這時對應的取走(8-x)根火柴,那麼就又留給對手8根火柴,那他也就陷入了必輸的狀態當中了。此時我們可以發現16也是乙個分界點!

再往下推到我們不難發現,當我們留下8,16,24.....96(都是8的倍數)根火柴時候,對手一定處於必輸的狀態當中,因為對手如果取x跟,我們就取對應的(8-x)根,使得對手永遠處於必輸的狀態當中(都剩下8的倍數根火柴)。再回到題目本身我們可以發現:存在著必勝的策略,而且是先手必勝。先手一開始先取走4跟火柴,那麼就剩下了100-4=96根火柴,那麼後手就一定處於必輸。

其實這個問題可以泛化為:

m根火柴,兩個人輪流取,每個人只能取1~n根(n<=m),問是否有必勝策略,有的話是先手必勝還是後手必勝?

當我們知道了上面這個特例的思想以後,這個泛化後的問題也就很容易解決了。如果m是(n+1)的倍數,那麼後手必勝;反之,先手必勝。

如果我們從這個問題本身衍生出來,可以變種為下列幾個同樣思路的問題:

100根火柴,兩個人輪流取,每個人每次只能取1,3,5,7根,誰拿到最後一根火柴誰贏;問有必勝策略嗎,

有的話是先手還是後手必勝?(思路還是一樣的)

或者是:

100根火柴,兩個人輪流取,每個人每次只能取1,2,3,4,5,7根(不能取6根,注意,當剩下的火柴是m的時候,

劉未鵬《跟波利亞學解題》: 

從設計模式來說如何思考問題?

從學習設計模式到現在差不多半年了,對這些前人總結下來的經典依然理解不是很深刻。這次老師好好的給 我上了一課,我感覺說的不僅僅設計模式,更讓我對思考問題的方式和處理知識的方法有了進一步的思考。從設計模式的分類說起 這張圖也就是平時我總結的一般方式,換句話也就是自己如何思考問題的思路。沒有任何問題,但是...

從對Linux核心守護者的採訪思考中國開源發展

略知鴉片戰爭以來民族發展軌跡的中國人,深知今天振興中華民族的關鍵是科學技術 是智財權 是自主創新,但這一切做起來容易嗎?上週一 2006年6月12日 北京晨報 上有一篇關於 民族wapi國際申訴被 封口 的報道,原文大意是wapi是我國提出的無線區域網安全技術標準,體現著我國標準戰略和資訊保安戰略的...

從fiddler的配置過程中,思考中間人攻擊的防範

清晰 https如何防範中間人攻擊 中間人可以獲取站點的證書,但不能獲取站點的私鑰,所以無法與客戶端進行金鑰協商。但中間人也不是沒有辦法,既然獲取不到站點的私鑰,那索性就不用站點的證書,比如fiddler。fiddler會使用自己的證書,而不使用站點的證書。這需要使用者手動新增並信任fiddler的...