1.2.1 理解問題
從實踐角度看,在設計算法之前,我們首先需要對給定的問題有完全的理解。我們應該仔細閱讀問題描述,有疑惑就提出來。試著手工處理一些小規模的例子,考慮一下特殊的情況,有必要時再繼續提出疑問。
有幾類問題會頻繁出現在計算機應用中,我們會在下一節中進行討論。如果待解問題屬于其中的一類,就可以用一個已知的算法來求解。當然,了解這些算法如何運作及其優缺點,對解決問題是有幫助的,尤其是在我們不得不從幾個可用的算法中選擇一個時。但更常見的情況是我們無法找到一個完全可用的算法而不得不自己設計,這往往是一項有趣而又困難的工作。這時,本節所介紹的一系列步驟會有所幫助。
算法的輸入,確定了該算法所解問題的一個實例(instance)。嚴格確定算法需要處理的實例的范圍是非常重要的(例如,回憶一下前一節中討論的三種最大公約數算法,它們能處理的實例范圍是不同的)。如果不這樣做,算法也許能夠正確處理大多數輸入,但遇到某些“邊界值”時就會出錯。記住,正確的算法不僅應該能處理大多數常見情況,而且應該能正確處理所有合法的輸入。
因此,不要對算法解題的第一步敷衍了事。否則,就要冒不得不返工的風險。