天天看點

一套解決問題的方法

轉自  G.波利亞在數學領域發展的一套解決問題的方法,它同樣可以用于解決軟體設計中的問題

1. 解決問題,你必須要了解的問題。

    未知量是什麼?

    現有資料是什麼?

    條件是什麼?

    能夠滿足這些條件嗎?

    這些條件足以決定未知量嗎?

    還是并不夠?

    或者其中有備援?

    甚至是沖突?

    畫一幅圖,引進一些合适的記号,把條件的不同部分分離開。你能把他們一一寫下嗎?

2. 設計一個計劃。找出現有資料與未知量之間的聯系。如果你找不出居中的聯系,那麼可能還得考慮些輔助性的問題。最終你應該能得出一份解決方案的計劃表。

    在此之前你遇見過這一問題嗎?或者曾經遇見過與此差别不大的問題?你知道某個相關的問題嗎?你知道一個可能會有用的定力麼?

    盯住哪個未知量!試着想出一個有着相同或者類似的未知量的問題來。一定有一個和你的問題相關的而且此前已經被解決過的問題,你能用它嗎?你能用它的結果嗎?或者用它的方法?你能再次用與以前都不同的方式重述這個問題嗎?回過頭去考慮一下定義把。

    如果你還是解決不了提出的這個問題,那麼試着先去解決一些相關的問題吧。你能設想出一個更容易解決的與此有關的問題嗎?一個更一般的問題?一個更特殊的問題?一個類似的問題?你能解決這個問題的一部分嗎?隻留下一部分條件而去掉其他條件,未知量能夠确定多少,它又能怎樣變化?你能從和諧資料中得出有用資訊嗎?你能找出其他适合用于确定未知量的資料嗎?你能修改未知量或者已知資料,或者必要時修改兩者,以使新的未知量和新的資料更加接近嗎?

    你使用了全部的資料嗎?你使用了所有的條件嗎?你考慮了該問題所涉及的所有核心概念了嗎?

3. 執行這一計劃。請執行你的計劃。

    執行你的求解計劃,檢查每一步,你能清楚地看到每一步都是正确的嗎?你能證明它是正确的嗎?

4. 回顧。檢視整個的解。

    你能核對結果嗎?你能核對論據嗎?你能用不同的方法來得出這個結果嗎?你能一眼就看出來嗎?

    你能在其他問題是使用這一結果或方法嗎?

    最有效的原則之一就是不要卡在單一的方法上。如果用UML畫設計圖不可行,那麼久直接用英語來寫。寫簡短的測試程式。嘗試一種截然不同的方法。想出一種蠻力解決方案。。。如果都不行,先離開這個問題。可以去散步,或者去想一想其他的事情,然後再回來重新面對這個問題。如果你盡了力還沒能獲得突破,那麼暫時不要去想它反而會比窮思苦想效果更好。