下載/瀏覽

Download Report

Transcript 下載/瀏覽

計算機概論-CH5
演算法
演算法的發現
發現演算法




發展一個程式需要兩個主要動作:發現
其內涵的基本演算法及將演算法表示成
程式。
發現演算法是軟體發展過程中具有挑戰
性的一步
找到演算法就找到解決問題的方法
了解演算法如何被發現,就等於了解問
題解答的過程
解決問題的藝術


設計演算法的步驟與發覺一般問題解法
的過程有密切的關聯
數學家G. Polya所定義解決問題的階段:
解決問題的藝術


G. Polya所強調解決問題階段並不是代表
解決問題一定要遵守這個步驟順序
Polya的四個階段並不一定得依序完成

事實上許多成功的解題者往往是在完全了解
問題之前(階段1)就已開始找出解答的策略
(階段2) ,因此如果此一策略在階段3或階段
4失敗時,解題者便可以了解到與此問題有
關的細節,並據以找到更佳的解法
找孩子年齡問題
根據線索一得到之可能解
根據線索二得到之可能解
根據線索三
得到之解

說明


在此例,我們直到企圖去完成我們的計畫以
解決這個問題(階段3)時才完成了解這個問
題(階段1) 。
若我們堅持先完成階段1再進行下一階段,
則我們將無法知道三個小孩的年齡
Getting a Foot in the Door

許多解決問題的方法似乎有一個共同點,
簡稱一腳已在門內(Getting a Foot in the
Door )

所謂一腳在門內並不是代表已經知道如何做,
而是我們已獲得一些重要線索並可使用一些求
解答方法推展這些已知的資訊因而獲得完全的
解答
Getting a Foot in the Door

這些求解答方法有



反推法:由結果(輸出)反推找出答案;例如
摺紙鳥問題
逐步細分法(stepwise refinement):逐步
細分法是一種由上而下方法論(top-down
methodology),步驟是由一般到特定。
由下而上方法論(Bottom-up methodology) :
是從特定到一般。先解決簡單或細微之處再
向上尋找答案