5 電腦與 問題解決203.72.64.251/chen/class/book/03243da_ch13.pdf ·...
TRANSCRIPT
![Page 1: 5 電腦與 問題解決203.72.64.251/chen/Class/Book/03243DA_ch13.pdf · 反覆的思考與求證(如分析、評估、判斷、比較)等過程,以抽絲剝繭的方式,找出解決](https://reader030.vdocuments.pub/reader030/viewer/2022011811/5e1a802bede5f9568a5936f2/html5/thumbnails/1.jpg)
同場加映
水平式邏輯思考
變數的概念
電腦解題工具
電腦與 問題解決
電腦解題與演算法
13-1 電腦可以協助解決哪些
問題
13-2 電腦解題簡介
13-3 電腦解題規劃-演算法
13-4 認識資料結構
13※電腦解題程序與實作
14-1 電腦解題程序
14-2 電腦解題實作
14
單元5
![Page 2: 5 電腦與 問題解決203.72.64.251/chen/Class/Book/03243DA_ch13.pdf · 反覆的思考與求證(如分析、評估、判斷、比較)等過程,以抽絲剝繭的方式,找出解決](https://reader030.vdocuments.pub/reader030/viewer/2022011811/5e1a802bede5f9568a5936f2/html5/thumbnails/2.jpg)
電腦與 問題解決
![Page 3: 5 電腦與 問題解決203.72.64.251/chen/Class/Book/03243DA_ch13.pdf · 反覆的思考與求證(如分析、評估、判斷、比較)等過程,以抽絲剝繭的方式,找出解決](https://reader030.vdocuments.pub/reader030/viewer/2022011811/5e1a802bede5f9568a5936f2/html5/thumbnails/3.jpg)
資訊科技概論
290(https://irs.thsrc.com.tw/IMINT)
圖13-1 電腦解決問題的應用範例
電腦解題與演算法
電腦每秒可執行超過十億次以上的運算,是幫助人類解決問題的好工具。你知
道在哪些領域適合使用電腦來解決問題嗎?要如何善用電腦來協助我們解決
問題呢?本章將介紹「電腦解題」與「演算法」的相關概念,培養同學邏輯思維及
運用電腦解決問題的能力。
CHAPTER
1313-1 電腦可以協助解決哪些問題
早期電腦主要是應用在大量資料的計算上,而現今電腦已被廣泛地應用在各個領域,
例如科學研究、軍事發展、醫學實驗、氣象預測、商業計算、影音休閒、生活應用(圖
13-1)……等,以下列出電腦在這些領域常見的應用實例:
科學研究:太空探測、行星軌道計算、替代能源開發等。
軍事發展:彈道計算、飛彈導航、戰略模擬等。
醫學實驗:基因研究、遠距醫療、電腦斷層掃描等。
氣象預測:颱風預測、地震預測、雨量預測等。
商業計算:金融稅務、風險精算、投資分析等。
影音休閒:電腦遊戲、電腦繪圖、動畫繪製等。
生活應用:網路訂票、網路購物、自動櫃員機、網路資料搜尋等。
網路訂票(http://www.google.com.tw)
(http://photino.cwb.gov.tw/)
颱風預測網路資料的搜尋
這些都靠我!
![Page 4: 5 電腦與 問題解決203.72.64.251/chen/Class/Book/03243DA_ch13.pdf · 反覆的思考與求證(如分析、評估、判斷、比較)等過程,以抽絲剝繭的方式,找出解決](https://reader030.vdocuments.pub/reader030/viewer/2022011811/5e1a802bede5f9568a5936f2/html5/thumbnails/4.jpg)
291
第13章 電腦解題與演算法單元5
13-2 電腦解題簡介
要利用電腦來解決問題,有2項重要的前置作業,首先要利用邏輯性的思考,找出解
決問題的方法;接著再以循序漸進的方式,規劃出解決問題的步驟,分別說明如下。
13-2.1 垂直式邏輯思考
垂直式邏輯思考(Vertical thinking)又稱為「收斂式思考」,這種思考方式是透過
反覆的思考與求證(如分析、評估、判斷、比較)等過程,以抽絲剝繭的方式,找出解決
問題的方法。
垂直式邏輯思考適合應用在科學研究、數學運算及電腦解題等邏輯性思考的問題上;
當我們要使用電腦來解決問題時,經常需要使用這種思考方式。圖13-2為一個使用垂直
式邏輯思考來求解的簡單範例。
某家商店1GB的RAM 1,000元,2GB的RAM 1,800元,請問如何用5,000元買到最多容量
的RAM?
圖13-2 垂直式邏輯思考問題的範例
答案
1GB的RAM 1,000元
線索1
可花用的金額為 5,000元
線索3
2GB的RAM 1,800元
線索2
RAM不能分割出售
線索4
問題
2. 計算1GB與2GB RAM的單位價格,比較何者便宜?
1. 根據問題,可以得知以下4個線索:
3. 因為2GB RAM的單位價格較便宜,所以應儘量多買2GB的RAM。
答案:買2GB的RAM 2條、1GB的RAM 1條,共花用4,600元。
容量 單位價格 費用
1GB 1,000/1GB = 1,000 較貴
2GB 1,800/2GB = 900 較便宜
透過分析比較
找答案
![Page 5: 5 電腦與 問題解決203.72.64.251/chen/Class/Book/03243DA_ch13.pdf · 反覆的思考與求證(如分析、評估、判斷、比較)等過程,以抽絲剝繭的方式,找出解決](https://reader030.vdocuments.pub/reader030/viewer/2022011811/5e1a802bede5f9568a5936f2/html5/thumbnails/5.jpg)
資訊科技概論
292
某家商店1GB的RAM 1,000元,2GB的RAM 1,800元,請問如何用5,000元買到最
多容量的RAM?
課外閱 讀課外閱 讀 水平式邏輯思考
另一種人類的思考方式稱為水平式邏輯思考(Horizontal thinking),又稱為「發散式思考」。它
是一種不受既有事物或觀念拘束的思考方式,常用來激發創意或尋求新的見解(圖13-3)。
水平式邏輯思考較適合應用在藝術創作、創意研發等領域。生活中有些問題,使用水平式思
考,會比使用垂直式思考更合適。例如:怎麼設計出一句響亮的廣告詞?如何推銷賣不出去的
商品……等。
圖13-3 水平式邏輯思考問題的範例
註 水平式思考並沒有所謂的「標準答案」,只要答案能符合題目的邏輯,都可算是正確解答哦!
問題
問題
去網路商店買可能
比較便宜
思考1
先把5,000元拿去
投資增值
思考3
多買一點,應該可
以殺價
思考2
買二手品應該比較
便宜
思考4
換個角度
想答案
以下有兩道題目,請同學運用水平式邏輯思考,找出最符合題目邏輯的答案註。
Q1 世上最大的馬鈴薯長在哪裡? 參考答案:土裡
Q2 什麼地方所有男人都一樣帥? 參考答案:黑暗中
![Page 6: 5 電腦與 問題解決203.72.64.251/chen/Class/Book/03243DA_ch13.pdf · 反覆的思考與求證(如分析、評估、判斷、比較)等過程,以抽絲剝繭的方式,找出解決](https://reader030.vdocuments.pub/reader030/viewer/2022011811/5e1a802bede5f9568a5936f2/html5/thumbnails/6.jpg)
293
第13章 電腦解題與演算法單元5
13-2.2 循序漸進的解題流程
電腦不像人類具有獨立思考的能力;我們必須先透過「垂直式邏輯思考」來找出解決
問題的方法,再規劃出解決問題的明確指令或步驟,電腦才能依循這些步驟來解題。圖
13-4是將老鼠走迷宮問題的解題步驟以流程來表示的範例。
如果我們所要解決的問題
較為龐大或複雜,可採循序
漸進的方式,先將問題分割成
幾個較小的問題,再針對每一
個較小的問題,一一規劃出解
題的步驟,以有系統地解決問
題。
1. 下列哪一種思考方式,最適合用在電腦解題的領域上? (A)水平式思考 (B)跳躍式思考 (C)發散式思考 (D)垂直式思考。
2. 下列有關垂直式邏輯思考的敘述,何者正確? (A)又稱發散式思考 (B)是透過思考與求
證,找出問題的答案 (C)是不受既有觀念拘束的思考方式 (D)適合用在創意研發的領
域。
3. 有肉粽、春捲、肉包、水餃四道菜,已知:
(1) 第一道菜是肉粽或水餃
(2) 第二道菜不是春捲,第三道菜不是肉包
(3) 第四道菜是肉包或水餃
(4) 第三或第四道菜是水餃
請問,肉粽、春捲、肉包、水餃各是第幾道菜?
http://sls.weco.net/blog/balance9235/15-jun-2007/2075 介紹循序流程的電腦解題方法-螞蟻演算法
顯示 過關畫面
圖13-4 老鼠走迷宮問題的解題流程範例
前進並記路
老鼠走迷宮
其他
叉路 死巷 出口
判斷是否有 沒走過的路
是
否
選一條 沒走過的路
判斷前方情形
往回走,回到前一個叉路口
![Page 7: 5 電腦與 問題解決203.72.64.251/chen/Class/Book/03243DA_ch13.pdf · 反覆的思考與求證(如分析、評估、判斷、比較)等過程,以抽絲剝繭的方式,找出解決](https://reader030.vdocuments.pub/reader030/viewer/2022011811/5e1a802bede5f9568a5936f2/html5/thumbnails/7.jpg)
資訊科技概論
294
11 22 33
4 55 64 6
新竹
阿里山
新竹
阿里山
火車+民宿四人房 $ 7,976
火車+旅館四人房 $ 9,016
高鐵+民宿四人房 $10,912
高鐵+旅館四人房 $11,952
上網查詢從新竹到阿里山的交通資訊
查詢交通工具的班次與車資
上網查詢當地的住宿資訊
查詢旅遊景點及門票費用
以試算表軟體彙整相關旅遊資訊
選擇合適的方案,再訂房與訂票
飯店
民宿新竹
80 苗栗
198 121 台中
239 162 41 彰化
423 346 225 184 嘉義
13-3 電腦解題規劃-演算法
假設你和3位朋友要從新竹到阿里山玩兩天一夜,總預算為8,000元(不含餐費與個
人花費),要如何規劃行程,才不會讓費用超出預算呢?試試看用電腦來查詢資訊及試算
費用,以作為旅遊規劃的參考(圖13-5)。
圖13-5 規劃旅遊行程的示意圖
很多人都需要做類似的旅遊規劃,因此有許多網站為了商機,會提供規劃旅遊行程的
程式,我們只要輸入來回地點和預算,電腦便會自動提供一些適合的方案供我們選擇。
程式設計師在開發這種程式時,必須事先規劃出明確的步驟,才能依步驟來解決問
題。以下將介紹規劃電腦解題步驟時用的「演算法」,讓同學瞭解其特性、表示法及基本
結構。
![Page 8: 5 電腦與 問題解決203.72.64.251/chen/Class/Book/03243DA_ch13.pdf · 反覆的思考與求證(如分析、評估、判斷、比較)等過程,以抽絲剝繭的方式,找出解決](https://reader030.vdocuments.pub/reader030/viewer/2022011811/5e1a802bede5f9568a5936f2/html5/thumbnails/8.jpg)
295
第13章 電腦解題與演算法單元5
1. 讀入一筆考生的成績資料
2. 加總各科考試成績
3. 輸出各科考試成績(含加總成績)
4. 重複步驟1~3,直到所有考生的成績資料都處理完畢
圖13-6 成績計算演算法
A 輸入
考生的各科成績資料
C 有限性
經過步驟1~4,即可
輸出加總後的成績單
B 輸出
考生各科成績及總分
13-3.1 演算法簡介
演算法(algorithm)是一組用來解
決特定問題的有限指令或步驟,我們可
以依循這些指令,在有限的步驟內逐步
解決問題或完成特定工作。演算法中的
每一個步驟都必須非常明確,不可以模
稜兩可。
演算法必須具備如表13-1所示的5項特性。
13-3.2 演算法實例
演算法不僅可用來解決數學或科學上的問題,也可應用在日常生活中,以解決特定的
問題或完成特定的工作。例如圖13-6所示的演算法,是要加總考生各科的成績,並將計
算所得的總分連同各科成績輸出。
D 明確性
成績資料的輸入、處理
及輸出,每一個步驟都
很明確
E 有效性
計算成績總分的4個步
驟都是可執行的
表13-1 演算法必須具有的5項特性
特性 說明 圖中編號
輸入
(input)要有輸入資料,但
並非絕對必要A
輸出
(output)要有一個以上的輸
出資料B
有限性
(finiteness)必須在有限的處理
步驟內得到結果C
明確性
(definiteness)
每個步驟都必須明
確,不能有模稜兩
可的情況D
有效性
(effectiveness)每個步驟都必須是
可執行的E
![Page 9: 5 電腦與 問題解決203.72.64.251/chen/Class/Book/03243DA_ch13.pdf · 反覆的思考與求證(如分析、評估、判斷、比較)等過程,以抽絲剝繭的方式,找出解決](https://reader030.vdocuments.pub/reader030/viewer/2022011811/5e1a802bede5f9568a5936f2/html5/thumbnails/9.jpg)
資訊科技概論
296
13-3.3 演算法的表示方法
在設計演算法時,我們常以流程圖表示法與敘述表示法兩種方式來表示處理的步驟,
分別說明如下。
流程圖表示法
流程圖(flowchart)是使用簡明的圖示符號來表達解決問題步驟的示意圖,表13-2是常用的流程圖符號及其所代表的意義。
表13-2 常用的流程圖符號與說明
符號 代表意義 作用
開始或結束 表示流程圖的開始或結束
螢幕 表示將資料輸出於螢幕上
輸入或輸出 表示資料的輸入或輸出
處理符號 表示執行某些工作
決策或判斷 表示以符號內的條件式作判斷,決定執行的流向
迴圈符號 設定迴圈變數的初值與終值
流向符號 表示程式的執行方向和順序
連接符號 表示流程圖的出口或入口
列印符號 表示資料由印表機輸出
磁碟符號 表示由磁碟輸入或輸出資料
![Page 10: 5 電腦與 問題解決203.72.64.251/chen/Class/Book/03243DA_ch13.pdf · 反覆的思考與求證(如分析、評估、判斷、比較)等過程,以抽絲剝繭的方式,找出解決](https://reader030.vdocuments.pub/reader030/viewer/2022011811/5e1a802bede5f9568a5936f2/html5/thumbnails/10.jpg)
297
第13章 電腦解題與演算法單元5
1. 將金融卡放入ATM
3. 密碼是否正確?
F T
10. 是否列印交
易明細表?
11. 列印交易
明細表12. 螢幕顯示
交易明細表
2. 輸入密碼7. 輸入對方帳號
8. 輸入轉帳金額
9. 取回金融卡
4. 顯示錯誤
訊息
5. 本行轉帳
或跨行轉帳註
6. 輸入對方
銀行代碼
T F
T︵本行轉帳︶
F(跨行轉帳)
13. 結束
圖13-7為使用流程圖表示法來描述日常生活中使用ATM轉帳的流程。
T為True(是);
F為False(否)。
圖13-7 ATM轉帳流程的流程圖
敘述表示法
敘述表示法是使用虛擬碼,來表達演算法的處理步驟。虛擬碼(pseudo code)是一
種以簡潔扼要的文字,來設計程式邏輯的工具。許多程式設計師為了方便直接參照虛擬碼
來撰寫程式,會使用類似程式語言(如C)的語法,來撰寫虛擬碼。圖13-8是將圖13-7中的演算法以敘述表示法來描述處理的步驟。
圖13-8 ATM轉帳流程的虛擬碼
1. 放入金融卡 7. 輸入對方帳號
2. 輸入密碼 8. 輸入轉帳金額
3. 判斷密碼是否正確,若正確,跳至步驟5;若錯
誤,跳至步驟4 9. 取回金融卡
4. 在螢幕顯示錯誤訊息,並跳至步驟210. 判斷是否需要列印交易明細表,若需要,
跳至步驟11;若不需要,跳至步驟12
5. 判斷是本行轉帳或跨行轉帳,若為 "跨行轉帳",跳至步驟6;若為 "本行轉帳",跳至步驟7
11. 列印交易明細表,並跳至步驟13
12. 在螢幕顯示交易明細表
6. 輸入對方銀行代碼 13. 結束流程
註 我們透過網路購物時,若賣家的帳戶與我們的帳戶分屬於不同銀行,就必須使用「跨行轉帳」的方式來匯款。
![Page 11: 5 電腦與 問題解決203.72.64.251/chen/Class/Book/03243DA_ch13.pdf · 反覆的思考與求證(如分析、評估、判斷、比較)等過程,以抽絲剝繭的方式,找出解決](https://reader030.vdocuments.pub/reader030/viewer/2022011811/5e1a802bede5f9568a5936f2/html5/thumbnails/11.jpg)
資訊科技概論
298
圖13-10 條件結構
重複結構
重複結構(repetition structure)是一種反覆執行解決問題的步驟,直到特定條件出
現才停止執行的控制結構(圖13-11)。當電腦需要處理反覆執行的問題時,便可以使用
重複結構來處理。例如要累加1至10的總和,就可以使用重複結構來處理。
1. 判斷數值除以2所得之餘數是
否等於0
2. 若為0,就顯示 "此數字為偶 數";若不為0,則顯示 "此數
字為奇數"
3. 下一個步驟…
條件式成立?
步驟 (1至多個)
步驟 (1至多個)
下一個步驟
T F
13-3.4 演算法的基本結構
演算法包含循序、條件及重複等3種基本結構,一個用來解決問題的演算法,常使用
到這3種基本結構,以下將分別介紹。
循序結構
循序結構(sequence structure)是一種
由上而下依序執行的控制結構(圖13-9)。
當電腦要依序執行動作時,就會使用循序結
構。例如要利用電腦輸出「小蜜蜂」音樂,就
必須使用循序結構來處理。
條件結構
條件結構(selection structure)是一種依照特定的條件或測試的結果,來決定不同
執行路徑的控制結構(圖13-10)。當電腦需要處理抉擇的問題時,就必須使用條件結
構。例如要判斷數值為奇數或偶數,必須使用條件結構來處理。
圖13-9 循序結構
1. 輸出一拍的 "So" 音
2. 輸出一拍的 "Mi" 音
3. 輸出二拍的 "Mi" 音
4. 輸出一拍的 "Fa" 音
5. 輸出一拍的 "Re" 音
6. 輸出二拍的 "Re" 音
…步驟N
步驟2
步驟1
輸出小蜜蜂音樂
判斷奇偶數
![Page 12: 5 電腦與 問題解決203.72.64.251/chen/Class/Book/03243DA_ch13.pdf · 反覆的思考與求證(如分析、評估、判斷、比較)等過程,以抽絲剝繭的方式,找出解決](https://reader030.vdocuments.pub/reader030/viewer/2022011811/5e1a802bede5f9568a5936f2/html5/thumbnails/12.jpg)
299
第13章 電腦解題與演算法單元5
圖13-11 重複結構
1. 設定數值i = 1,sum = 0
2. 判斷i值是否 ≦ 10,若為是,跳
至步驟3;若為否,跳至步驟5
3. 將i值加到sum中
4. 將i值加1,並跳至步驟2
5. 顯示sum值
下一個步驟
條件式成立?
步驟 (1至多個)
T
F
累加1~10
如果要累加1至1,000的總和,要如何更改
以上的虛擬碼呢?
課外閱 讀課外閱 讀 變數的概念
變數(variable)是指一種內容不固定的資料項目,這種資料項目的值通常會隨著程式的執行而
改變。例如圖13-11的虛擬碼中,i與sum即是變數。
在程式語言中,變數通常是由名稱、儲存空間、儲存位址、資料型別及內容(即變數的值)等5項內涵所組成(圖13-12),說明如下:
名稱:每個變數都須有一個專用的名稱,以資識別。
儲存空間:變數在記憶體中所佔用的儲存空間大小。
儲存位址:在記憶體中,變數內容開始存放的起始位址。
資料型別:變數儲存空間允許存放的資料型別,例如整數、實數、字串等。
內容:在變數儲存空間中所存放的資料,就是變數的內容,也稱為變數的值。
圖13-12 整數變數內涵示意圖
5A34
60
5A35 5A36 5A37
儲存空間佔2bytes(假設整數
型別使用2bytes儲存)
一格代表1 byte
1. 名稱:sum2. 儲存空間:2個bytes3. 儲存位址:從記憶體的(5A34)16
位址開始存放資料
4. 資料型別:整數
5. 內容:60
![Page 13: 5 電腦與 問題解決203.72.64.251/chen/Class/Book/03243DA_ch13.pdf · 反覆的思考與求證(如分析、評估、判斷、比較)等過程,以抽絲剝繭的方式,找出解決](https://reader030.vdocuments.pub/reader030/viewer/2022011811/5e1a802bede5f9568a5936f2/html5/thumbnails/13.jpg)
資訊科技概論
300
D E
C
AB
圖13-13 景點位置示意圖
本題共有8條可能路段,每條路段的狀態可分為 "選" 與 "不選" 2種,
因此可能的組合共有28 = 256種。如果使用暴力法策略來解題,我們只要
一一列出這256種可能組合(表13-3),即可找出能連接所有景點,且成
本最低的組合。
圖13-14 馬路興建成本示意圖
表13-3 路段與成本的可能組合
路線
組合
路段編號成本
連接所
有景點一 二 三 四 五 六 七 八
1 P - - - - - - - 1 ×
2 - P - - - - - - 7 ×
…
n-1 P - P - - P P - 12 ○
n P - P - P P - - 11 ○
…
256 P P P P P P P P 37 ○
A
D
C
B
E
A
E
C
B
D
路段 編號
成本一 1
三 2
二 7
六 5
八 9
七 4
五 3
四 6
且成本最低
連接所有景點,
至少要選 4 條
路段才能連接
所有景點哦!
13-3.5 解題策略
在規劃演算法之前,應該先選擇一個合適的解題策略,再進行演算法的規劃。不同的解
題策略,適合用來解決不同的問題,以下介紹3種較常見的解題策略。
暴力法
暴力法(Brute Force)是電腦解題策略中最簡單也是最原始的方法,它的概念是透過逐
一比對或計算,一一嘗試,以找出最佳解。某縣內有A~E五個新景點(圖13-13),要規劃
興建馬路,但因經費考量,只能興建4條馬路來連接所有景點。假設可興建馬路的路段與所需
成本如圖13-14所示,請問應該在哪幾條路段上興建馬路,才能使成本最低呢?
![Page 14: 5 電腦與 問題解決203.72.64.251/chen/Class/Book/03243DA_ch13.pdf · 反覆的思考與求證(如分析、評估、判斷、比較)等過程,以抽絲剝繭的方式,找出解決](https://reader030.vdocuments.pub/reader030/viewer/2022011811/5e1a802bede5f9568a5936f2/html5/thumbnails/14.jpg)
301
第13章 電腦解題與演算法單元5
D E
C
AB
暴力法的策略簡單易懂,但是當資料量龐大時,這種解題方法就會相當沒有效率。因
此,除非沒有更理想的解題策略,我們才會使用暴力法來解題。
貪進法
貪進法(greedy method)的概念就是當面臨不同的選擇時,每次都以最小的成本或
最大的效益為原則,來找出可行的解答。
延續上一個找出最低成本的問題(圖13-14),貪進法的策略是先選成本最低的路
段,再選成本第二低的路段。本題共有8條路段,若使用貪進法來求解,最多只需經過8次的選取(表13-4),即可找到最佳路徑;和暴力法相比,使用此種方法來求解,效率
高出許多。
在選取路段時,我們要注意不可選只會增加成本,但不
會增加景點連結的路段。例如選取路段一、三之後,景點
A、B、C已可連結在一起,若再選路段四,只會徒增成本
(圖13-15)。
貪進法的概念簡單、解題效率高,常被用來解決最佳化的問題,例如求最低成本、最
短路徑……等。
可不必再往下判斷
到此已連接所有景點,
表13-4 用貪進法找出最低成本的路段組合
選取路段 成本 徒增成本 路段組合
一 1 否→選取 {一}
三 2 否→選取 {一,三}
五 3 否→選取 {一,三,五}
七 4 是→不選 {一,三,五}
六 5 否→選取 {一,三,五,六}
四 6 是→不選 {一,三,五,六}
二 7 是→不選 {一,三,五,六}
八 9 是→不選 {一,三,五,六}
D E
C
AB一
三
二
六
八
七
四
五
圖13-15 選取路段的原則
不要選
![Page 15: 5 電腦與 問題解決203.72.64.251/chen/Class/Book/03243DA_ch13.pdf · 反覆的思考與求證(如分析、評估、判斷、比較)等過程,以抽絲剝繭的方式,找出解決](https://reader030.vdocuments.pub/reader030/viewer/2022011811/5e1a802bede5f9568a5936f2/html5/thumbnails/15.jpg)
資訊科技概論
302
各個擊破法
各個擊破法(Divide and Conquer)是將一個問題分解(divide)成數個子問題,並
找出共通的解決方法(= 擊破,conquer),再透過重複操作的方式來解決各個子問題,
最後即可將問題解決。圖13-16是應用各個擊破法,將一串數值由小到大排序的範例。
圖13-16 各個擊破法的範例
1348520220
13 48 5202 20
分 解 擊 破
20 02 52 48 13 02 20 02 52 48 13
13 02 20 02 52 48 13
13 02 20 52 48 02 13 02 20 52 48
02 13 20 52 48 02 13 20 48 52 48
左 右標準值
移到最左邊
左 右標準值
右標準值
左
以你為中心
選定標準值,
分解左、右
好棒!
排序規則(演算法)
1 以第一個數值為中心(標準
值),分左右兩邊
2 將右邊大於標準值的數值依次
移至最左邊(標準值左右兩邊
即為2個子問題)
3 對左邊的數值重複步驟1、2,直到排序完成
4 對右邊的數值重複步驟1、2,直到排序完成
移到最左邊
移到最左邊
移到最左邊1
3
4
2
![Page 16: 5 電腦與 問題解決203.72.64.251/chen/Class/Book/03243DA_ch13.pdf · 反覆的思考與求證(如分析、評估、判斷、比較)等過程,以抽絲剝繭的方式,找出解決](https://reader030.vdocuments.pub/reader030/viewer/2022011811/5e1a802bede5f9568a5936f2/html5/thumbnails/16.jpg)
303
第13章 電腦解題與演算法單元5
13-3.6 演算法與程式設計的關係
一個優良的演算法可幫助我們在有限的步驟內,以最有效率的方法來解決問題。因此
在設計程式來解決某項問題之前,我們通常會先使用流程圖或虛擬碼來構思解決問題的演
算法,再參照演算法的內容來撰寫程式,如圖13-17所示。
1. 下列有關演算法的敘述,何者不正確? (A)演算法是用來描述解決問題的步驟 (B)演算
法可以利用流程圖或文字敘述的方式來表達 (C)只能應用在科學領域上 (D)演算法的推
演步驟可以利用接近程式語言的語法來加以描述。
2. 右圖的流程圖可用來表示哪一種程式基本結構的執行流程?
(A)循序結構 (B)重複結構 (C)條件結構 (D)平行結構。
3. 下面3個日常生活問題的解決,適合使用哪一種控制結構來描述?
A.循序結構 B.條件結構 C.重複結構
(1) 外出帶傘:如果天氣預報降雨機率超過50%,就帶傘出
門;否則就不帶傘出門。
(2) 隱形眼鏡配戴:先清潔雙手,再將隱形眼鏡戴上。
(3) 繞操場跑5,000公尺:繞長度200公尺的操場連續跑25圈。
開始
輸入姓名
輸出 "歡迎" + 姓名 + "的光臨"
結束
圖13-17 先構思演算法,再撰寫程式
流程圖 虛擬碼
撰寫程式碼
構思演算法
![Page 17: 5 電腦與 問題解決203.72.64.251/chen/Class/Book/03243DA_ch13.pdf · 反覆的思考與求證(如分析、評估、判斷、比較)等過程,以抽絲剝繭的方式,找出解決](https://reader030.vdocuments.pub/reader030/viewer/2022011811/5e1a802bede5f9568a5936f2/html5/thumbnails/17.jpg)
資訊科技概論
304
13-4 認識資料結構
一個好的程式除了必須使用良好的演算法之外,也需使用適當的資料結構來組織資
料,才能節省資料的儲存空間,並提昇資料處理的速度。
13-4.1 資料結構簡介
資料結構(data structure)是用來組織及管理資料的結構設計。使用資料結構可將
資料建立成為一個便於取用與處理的結構。以下將介紹陣列、堆疊及佇列等3種基本的資
料結構。
13-4.2 陣列
陣列(array)是由一群資料型別相同且依序排列的陣列元素所組成。當我們在存取
陣列中的資料項目時,必須使用陣列的註標(index)來標示所要存取的資料項目。
陣列若依其註標之個數,可分為一維陣列(圖13-18)、二維陣列(圖13-19)、 ……、n維陣列;其中n表示註標之個數。
圖13-18 一維陣列範例
http://www.im.tku.edu.tw/~tweety15c/index.htm 提供資料結構的動畫教學
http://ind.ntou.edu.tw/~b0170/data_structure/index01.htm 介紹資料結構
元素A(1) 存放的資料:10元素A(2) 存放的資料:70
……
元素A(5) 存放的資料:75
元素
註標
A1 2 3 4 5
10 70 90 66 75
元素B(1,1) 存放的資料:22元素B(1,2) 存放的資料:45
……
元素B(3,5) 存放的資料: 9
B
22 45 37 11 25
76 93 54 6 10
83 77 42 66 9
(1, 1) (1, 2) (1, 3) (1, 4) (1, 5)
(2, 1) (2, 2) (2, 3) (2, 4) (2, 5)
(3, 1) (3, 2) (3, 3) (3, 4) (3, 5)
元素
註標
圖13-19 二維陣列範例
陣列的應用相當廣泛,例如程式中需要處理40位同學的數學成績,便可使用陣列來
儲存及處理這些資料,以省去建立多個變數的麻煩。
![Page 18: 5 電腦與 問題解決203.72.64.251/chen/Class/Book/03243DA_ch13.pdf · 反覆的思考與求證(如分析、評估、判斷、比較)等過程,以抽絲剝繭的方式,找出解決](https://reader030.vdocuments.pub/reader030/viewer/2022011811/5e1a802bede5f9568a5936f2/html5/thumbnails/18.jpg)
305
第13章 電腦解題與演算法單元5
圖13-21 堆疊應用的示意圖
MSN首頁
娛樂新聞
堆疊的應用相當廣泛,例如瀏覽器的上一頁功能,可讓使用者按此鈕返回曾經拜訪過
的網頁,這是因為瀏覽器軟體中有一堆疊,會依序存放(推入)使用者拜訪過的網址,每
按一次上一頁鈕,就會從堆疊中取出(彈出)最上方的網址,回到使用者前一個拜訪過的
網頁(圖13-21)。
13-4.3 堆疊
堆疊(stack)是一種具有後進先出(Last In First Out, LIFO)特性的資料結構。
資料存取規則是:資料項目加入時,只能加到堆疊的頂端(top);取出資料項目時,必
須由頂端將資料優先取出(圖13-20)。在堆疊中加入資料的動作稱為推入(push),取
出資料的動作則稱為彈出(pop)。
圖13-20 堆疊範例
2. 娛樂新聞
1. MSN首頁
按上一頁鈕
(彈出)
拜訪網頁
(推入)
記錄網址的堆疊
推入(push) 彈出(pop)
頂端(top)
連至娛樂新聞
按1次上一頁鈕,回到娛樂新聞;
按2次上一頁鈕,回到MSN首頁
科技新聞
連至科技新聞
![Page 19: 5 電腦與 問題解決203.72.64.251/chen/Class/Book/03243DA_ch13.pdf · 反覆的思考與求證(如分析、評估、判斷、比較)等過程,以抽絲剝繭的方式,找出解決](https://reader030.vdocuments.pub/reader030/viewer/2022011811/5e1a802bede5f9568a5936f2/html5/thumbnails/19.jpg)
資訊科技概論
306
13-4.4 佇列
佇列(queue)是一種具有先進先出(First In First Out, FIFO)特性的資料結構。
資料存取規則是:加入資料項目時,只能從佇列的尾端(rear)加入;取出資料項目時,
則只能從佇列的前端(front)取出(圖13-22)。
作業系統(如Windows)中的印表機排程程式,會依照先後順序來印出文件,就是
佇列的一種應用。
圖13-22 佇列範例
1. 在資料結構中,何種存取方式是採用先進先出? (A)佇列 (B)堆疊 (C)環狀 (D)陣列。
2. 下列哪一項非堆疊的事例? (A)排隊買票 (B)堆積木 (C)蓋房子 (D)堆盤子。
3. 陣列A的內容如下,請問A(2) + A(5) = 。
5 3 2 4 11 15
0 1 2 3 4 5
A
元素
註標
尾端(rear)前端(front)完成程序的人(已取出
的資料)
佇列的儲存空間
![Page 20: 5 電腦與 問題解決203.72.64.251/chen/Class/Book/03243DA_ch13.pdf · 反覆的思考與求證(如分析、評估、判斷、比較)等過程,以抽絲剝繭的方式,找出解決](https://reader030.vdocuments.pub/reader030/viewer/2022011811/5e1a802bede5f9568a5936f2/html5/thumbnails/20.jpg)
307
第13章 電腦解題與演算法單元5
MENU
選擇題
1. 下列何者是使用電腦解題最不需具備的能力? (A)垂直式邏輯思考能力 (B)循序漸進解題的能
力 (C)構思演算法的能力 (D)領導能力。
2. 下列何種流程圖的圖形不適用於循序結構之設計? (A) (B) (C) (D) 。
3. 請問下列以虛擬碼表示的演算法有什麼問題? (A)只有一個輸出結果 (B)無法在有限步驟內結
束 (C)有2個輸入值 (D)步驟不明確。
(1) 設定數值i = 1,sum = 0 (4) 跳到步驟(2)
(2) 將i值加到sum中 (5) 輸出sum值
(3) 將i值+1
4. 一流程圖如圖(一)所示,依流程順利執行後,列印B的值為何? (A)34 (B)40 (C)45 (D)49。
5. 每一次面對問題時,都以最小的成本或最大的效益
為原則。上述的演算法,是採用了下列哪一種電腦
解題策略? (A)貪進法 (B)暴力法 (C)黑箱測試法 (D)各個擊破法。
6. 老鼠走迷宮的程式必須記錄老鼠走過的路徑,以判別老鼠在迷宮內遇見叉路時,可選擇尚未走
過的路徑,請問下列哪一種資料結構最適合用來記錄老鼠走過的路徑? (A)佇列(queue) (B)堆疊(stack) (C)二元樹(binary tree) (D)陣列(array)。
多元練習題
1. 以下是一個有趣的邏輯問題,讓同學測試自己的邏輯能力。阿達賣早餐,其中有位客人點了50元的
早餐,拿出100元紙鈔結帳;店內沒有零錢,阿達便拿100元與隔壁的老闆兌換,並找錢給客人。過
了一會兒,隔壁老闆說剛才的紙鈔是假鈔,阿達為表示歉意,賠了100元給隔壁老闆,請問阿達共損
失了多少錢?
2. 有三對夫婦參加聚會,他們以握手、交談等方式寒暄。假設他們不會跟自己的配偶握手,也不會跟
同一個人握兩次手,在用餐前,主辦人老王詢問其他5人握手的次數,結果5個人的答案都不相同。
請問老王和他的太太分別與幾個人握過手?
3. 海上有五座孤島(A ~ E),假設要造橋讓這五座島可以相互往
來,各座島間可造橋的路段及所需花用的興建成本如右圖所示,
請同學找出花費成本最低的路段及其興建成本。
A=A-1
A=10, B=0
B=B+A
A<6
列印B
F
T
圖(一)
D E
CB
A
54
7
2
1
6 3島與島之間的數字
為造橋成本