• 沒有找到結果。

演算法 2

N/A
N/A
Protected

Academic year: 2022

Share "演算法 2"

Copied!
22
0
0

加載中.... (立即查看全文)

全文

(1)

演算法

2

2-1 演算法簡介 P.28

演算法的特性、演算法與電腦、

演算法的表達

2-2 流程控制結構 P.37

循序結構、選擇結構、重複結構

2-3 流程圖設計實作 P.40

Draw.io

本章概念

(2)

智慧手環會蒐集使用者的行走步數 健康狀況的資訊,提供使用者參考。

程式必須依據演算法所規畫的步驟執行,才能將資料轉換成有用的資訊,因此在 學習程式設計之前,我們先來了解何謂演算法。

(3)

1 演算法的特性

日常生活中,我們會面臨許多問題,並為這些問題找到解決的 方法,這些解決問題的方法都可以視為一種廣義的演算法,例如蛋 糕的作法(食譜)、數學題的解法等。當我們遵循著演算法的步驟 執行時,將可以正確解決問題;若任意省略或變動其中的步驟,則 可能無法順利達到目的(圖1-2-1)。

進入 商店

挑選

文具 結帳 離開 商店

A 依左列 4 個步驟執行,可以在有

限步驟內順利解決「購買文具」

的問題。

進入 商店

離開 商店

B 任意省略步驟,未「挑選文具」

和「結帳」,無法解決「購買文 具」的問題。

進入 商店

挑選 文具

離開 商店

結帳

C 任意變動步驟順序,挑選完文具

就離開商店,未「結帳」,屬於 犯罪行為。

演算法簡介

2-1

圖 1-2-1 到 商 店 購買文具的演算法。

準備器材

每人準備1 張 A4 紙。

活動方式

1. 指定一人作為操作者,操作者背對所有人,一邊摺 紙,一邊敘述自己摺紙的步驟。

將紙對摺、將左上角摺一個三角形……。

2. 其他人依照操作者的敘述摺紙,過程中不能提問、討論。

3. 大約進行 7 ~ 8 個摺紙步驟之後,大家互相展示摺紙的結果。

活動討論

手腦並用

(4)

在手腦並用的活動中,如果操作者描述的指令不夠 明確,就會造成每個人摺出來的結果不一樣,例如指令 為「對摺、再對摺」,就可能有多種摺法(圖1-2-2)。

圖 1-2-2 指令不明確時,就 會造成不同的執行結果。例如 指令為「將紙對摺再對摺」,

就可能因為每個人放置紙的方 向、對摺的方向不同,而產生 各種不同的結果。

上述廣義的演算法常因敘述較不精確,導致解讀不 同而使結果有所差異。在資訊科技領域中,演算法有更 嚴謹的定義,以確保演算法能正確執行並有效解決問題。

演算法通常都具有以下特性:

1. 輸 入:可有多個輸入資料,或是沒有輸入資料。

2. 輸 出:必須至少有一個輸出結果。

3. 明確性:每個指令必須明確,不可模稜兩可。

4. 有限性:執行演算法,必須在有限步驟內結束。

5. 有效性:又稱可行性,演算法中的每個命令都必須 是可執行的步驟,用紙筆也能推演完畢,以確定能 解決問題。

演算法的五大特性

2

算 法

2-1

2-2

2-3

(5)

2 演算法與電腦

現在的電腦功能越來越強大,但它運作的背後,其實都 是遵循著演算法執行的。如果想讓電腦具有特定的功能,我 們就必須設計一套演算法,明確地告訴電腦:當它碰到什麼 狀況時應該如何反應,或是應該執行什麼步驟。

由於每個人的思考方式不同,針對同一個問題,可能會 設計出不同的演算法;而不同的演算法設計,會影響電腦處 理問題的結果與效率。例如:以相同的關鍵字在不同的搜尋 引擎上進行查詢,查詢的速度與所獲得的結果各有不同,這 就是演算法造成的差異。而由於搜尋引擎的演算法不斷進 步,讓我們查詢資料也越來越快速、越來越準確。

在現實世界中,針對同一個問題,可能已經存在各種解決 方法,但我們仍會不斷尋找更好、更快的方法來達成目標。

對於初學者來說,剛開始只要能夠建立可以解決問題的演 算法即可,隨著知識增長與經驗累積,就能改良、設計出更快 捷的演算法。

延伸學習 如何設計出更好的演算法?

改良

演算法 演算法

問題 問題

結果 結果

好的演算法能較有效率的解決問題。

(6)

3 演算法的表達

解決問題時,我們常會把演算法以文字或圖像表達 出來,以作為與他人溝通討論或是後續進行程式設計時 的依據。演算法沒有固定的呈現方式,只要能夠清楚表 達,並符合演算法的五大特性即可。常見的表達方式有 文字、流程圖、虛擬碼3 種。

文字 用一般語言文字來 描述執行步驟。

流程圖 用圖示符號來描 述執行過程。

虛擬碼 用類似程式語言 的方式來描述執 行步驟。

1 文字

演算法可以利用人類語言,如中文、英文、日文等 文字來描述。這種表達方式最簡單,但敘述較為冗長,

且容易因為每個人的表達和認知差異而造成誤解。

舉例

求甲、乙兩數相加之總和,以文字表示:

步驟1. 輸入「數字甲」。

步驟2. 輸入「數字乙」。

步驟3. 將「數字甲」及「數字乙」相加,

所得即為「總和」。

步驟4. 輸出「總和」。

2

算 法

2-1

2-2

2-3

(7)

2 流程圖

流程圖(

flowchart

)是利用各種圖形與箭頭等符 號,來表示執行一件事情的步驟與順序,不但適用於資 訊科技領域,也廣泛應用在工程、設計、商業領域,就 連日常生活中,也常看到流程圖的相關應用(圖1-2-3)。

●流程圖的優點

以流程圖來表示演算法,比文字敘述更容易理解,

因此被廣泛應用。其優點為:

1. 流程步驟的可讀性較高。

2. 方便除錯。

3. 容易修改流程。

舉例

求甲、乙兩數之總和,以流程圖表示:

總和=甲數+乙數 開始

結束 輸入甲數

輸入乙數

輸出總和 圖 1-2-3 常見的網

路購物流程。

將商品放入購物車

填寫寄送資料

結帳付款

貨物配送

取得商品

(8)

●繪製流程圖

為了方便所有人員都能正確解讀,

並依循流程圖來進行作業,因此流程 圖必須採用統一且具有特定意義的符號

(表1-2-1)。

在繪製流程圖之前,應先了解每個 符號代表的意義與用法,並且依照流程 圖繪製原則(圖1-2-4)來繪製。

1-2-1 流程圖圖示說明

符號 名稱 說明

開始/結束 流程的開始或結束

輸入/輸出 輸入或輸出資料

處理程序 要執行或處理的程序

決策判斷 針對條件進行判斷,以決定執行的流向

流向線 流程進行的方向

註解 表示附註說明之用

副程式 已定義流程的組合

文件 輸入或輸出文件

流程圖繪製原則

1. 使用標準符號,以便閱讀和分析。

2. 文字簡潔且明確可行。

3. 繪製方向由上而下,由左至右。

4. 流程線條避免交叉或過長。

圖 1-2-4 流程圖繪製原則。

2

算 法

2-1

2-2

2-3

(9)

右圖為登入某網站時的操作 流程:

使用者開啟網頁後要輸入帳 號、密碼,若輸入正確,會顯 示「歡迎畫面」;若輸入錯誤,

則回到「輸入帳號、密碼」的 步驟。

請參照表1-2-1,試著為每一個 步驟加上正確的流程圖符號。

手腦並用

成立 帳號密碼 不成立

正確

輸出

「歡迎畫面」

開啟網頁 開始

輸入

「帳號密碼」

結束

(10)

●流程圖的適用範圍

流程圖可以用來處理簡單的小問題,也可以用來描 述複雜的大問題。一般而言,流程圖可以先描述大致的 步驟,再逐步細微化,以方便流程的理解、維護與管理

(圖1-2-5)。

圖 1-2-5 遇到複雜的問題時,將流程圖採用模組化的方式呈現,

具有更高的可讀性。

開始

結束 上學 起床

吃早餐 整理儀容

主程式 副程式

整理儀容

穿運動服

帶一套 替換服裝

穿制服 有體育課

返回主程式

副程式

自己做 三明治 慢慢享用

買麵包吃 時間充足

返回主程式 吃早餐

副程式中,以 示「副程式名稱」作為 開始,最後以 示「返回主程式」作為 結束。

2

算 法

2-1

2-2

2-3

(11)

3 虛擬碼

當我們學過程式語言之後,也可以使用虛擬碼(

pseudo code

來表達演算法。虛擬碼是一種介於「人類語言」與「程式語言(如 P

ython

C、C++)」間的表達方式,用類似程式語言的方式來描述 執行步驟,兼具文字描述容易表達,以及流程圖容易理解的優點。

舉例

三種表示法的比較:

1. 求甲、乙兩數相加之總和。

文字 流程圖 虛擬碼

步驟1. 輸入「數字甲」。

步驟2. 輸入「數字乙」。

步驟3. 將「數字甲」及「數 字乙」相加,所得 即為「總和」。

步驟4. 輸出「總和」。

總和=甲數+乙數 開始

結束 輸入甲數

輸入乙數

輸出總和

(1) input 甲 (2) input 乙 (3) sum = 甲 + 乙 (4) print sum

2. 依據是否下雨來決定行程。

文字 流程圖 虛擬碼

步驟1. 判斷是否下雨。

步驟2. 若下雨,

就去圖書館。

步驟3. 若未下雨,

就去打籃球。

下雨 開始

去圖書館 打籃球

成立 不成立

(1) if 下雨

(2) then 去圖書館 (3) else 去打籃球

(12)

演算法或程式如果沒有按照邏輯組織整理,當內容較多時,不 僅不易理解,也很難進行維護(圖1-2-6)。因此我們會以結構化的 方式,利用循序、選擇、重複結構來進行程式設計(圖1-2-7)。

圖 1-2-6 設計演算法時,若只是隨意記錄所有的想法,當內容較多或較複雜

時,將不易理解和維護。

聽說你完成了機器人程式的演算

法,借我看看。 超讚的!

好啊!你看!

我看看…

慘了!有些地方 我也看不太懂。

流程控制結構

2-2

呃…好複雜喔!

我看不懂。

圖 1-2-7 流程控制結構。

循序

結構

依指令先後順 序由上而下,

一個接著一個 執行。

選擇

結構

依條件判斷的 結果來執行指 令,常應用於 判斷、決策。

重複

結構

依需求重複執 行特定指令。

2

算 法

2-1

2-2

2-3

(13)

1 循序結構

循 序 結 構 是 由 上 而 下,依序按照一個指令、

一 個 指 令 逐 步 執 行, 這 是最基本的程式結構(圖 1-2-8)。

2 選擇結構

在執行過程中,若希 望程式經由條件判斷的 結果(成立 不成立),

來決定接下來要執行何 種 指 令, 就 可 使 用 選 擇

結構(圖1-2-9)。 流程。圖 1-2-9 選擇結構的標準

指令2 指令1

不成立 成立 條件式

圖 1-2-8 循序結構的標準 流程。

指令N 指令1

指令2

舉例

分數≥ 60 輸入分數

不及格 及格

成立 不成立

開始

結束

舉例

上學

刷牙 起床 開始

結束

(14)

3 重複結構

執行程式時,若希望讓某些指令重複執行多次,

就可以使用重複結構(圖1-2-10),不但能簡化程式,

也讓程式更容易閱讀與理解。

圖 1-2-10 重複結構的標準流程。前判斷式會先進行判斷再決定

是否執行指令,所以可能完全不執行指令;後判斷式會先執行指令,

然後再進行判斷,所以至少會執行一次指令。

不成立 指令

條件式 成立 後判斷式 前判斷式

成立 不成立 條件式

指令

小潔設計了一個多人競賽的闖關遊戲,每位玩家輪流 進行一個回合。想想看,下列兩種遊戲流程的執行結果有 什麼不同?

手腦並用

回合開始

回合結束

成立 不成立 和關主猜拳,

玩家勝利 前進一格

後判斷式

回合開始

回合結束 成立 不成立

和關主猜拳,

玩家勝利

前進一格

前判斷式

2

算 法

2-1

2-2

2-3

(15)

繪製流程圖時,我們可以手繪或使用流 程圖軟體來輔助,本節將以免費的線上軟體 D

raw

.

io

為例,繪製「依據是否下雨來決定 要不要帶雨傘出門」的流程圖(圖1-2-11)。

也可以使用其他軟體如Microsoft Word、Visio、

Diagram Designer、Cacoo 等軟體來繪製。

進入 Draw.io

1

3

2

① 連上 Draw.io 網頁

利用瀏覽器連結網址:

https://www.draw.io/

② 設定中文介面

若畫面不是中文選單,可選 語言 ,設為 繁體中文 。

③ 選擇檔案儲存位置

此處以 裝置 為例(儲存於電 腦中),依需求亦可選擇儲存 於其他雲端位置。

4

④ 新增圖表

Step1

流程圖設計實作

2-3

直接出門 開始

結束 下雨 不成立

帶雨傘出門 成立

圖 1-2-11 流程圖繪製範例。

(16)

5 6

7

輸入檔案名稱

⑥ 選擇類別

繪製一般流程圖,選擇 基本 圖形 即可。

⑦ 新增圖表

設定完成後,按 新增 。

Step2 介面說明

選單工具區

圖形區 編輯區 屬性區

功能及快速工具 選單。

設 定 圖 形 及 文 字 樣式、排列方式。

編 輯 流 程 圖 的 區 域。

各 種 可 使 用 的 圖 形物件。

2

算 法

2-1

2-2

2-3

(17)

1

3

2

1. 繪製圖形

(以「開始符號」為例)

① 拖曳圖形到畫布上。

② 拉動物件周圍的藍色控 制點,可以調整物件的 大小。

③ 橘色控制點可調整圓角 的弧度。

1

2

2. 輸入文字

① 圖形上雙擊滑鼠左鍵,

即可輸入文字。

② 可在「屬性區」設定文 字的格式。

③ 利用相同方式,完成其 他圖形。

Step3 物件編輯

1. 物件對齊

拖 曳 物 件 至 其 他 物 件 周 邊 時,會出現輔助線,讓物件 可以彼此對齊。

Step4 物件對齊

(18)

1 2

1. 連接物件

① 當 滑 鼠 游 標 接 近 物 件 時,會出現三角形的連 接點。

② 拖曳連接點至欲連接的 物件,會產生連接線。

1   2

2. 調整連接線

① 拖曳連接線中間的淺藍 色控制點。

② 調整連接線的彎曲角度 及位置。

1

 

2

3. 輸入文字

① 在連接線上雙擊滑鼠左 鍵以輸入文字。

② 將文字移動到連接線的 上方。

③ 利用相同方式完成所有 連接線。

Step5 連接線

1

2

1. 儲存檔案

繪製完成之後:

① 點擊 檔案 。

② 點擊 儲存 。

直接儲存,會以 xml 的格式 存檔。

Step6 儲存檔案

2

算 法

2-1

2-2

2-3

(19)

2 1

3

1. 匯出圖片

① 點擊 檔案 。

② 點擊 匯出為 。

③ 選擇圖片格式(以 PNG 為例)。

2 1

2. 設圖片規格

① 調整 縮放 比例。

② 點擊 匯出 。

2

1 3. 下載檔案

1. 輸入 檔案名稱 。 2. 點擊 下載 。

下載完成的圖檔

Step7

(20)

第 2章 學習重點

2-1 演算法簡介

1. 廣義來說,演算法就是解決問題的方法。

2. 在資訊科技領域中,演算法應具有 5 大特性:

(1) 輸入:可有多個輸入資料,或是沒有輸入資料。

(2) 輸出:必須至少有一個輸出結果。

(3) 明確性:每個指令必須明確,不可模稜兩可。

(4) 有限性:執行演算法,必須在有限步驟內結束。

(5) 有效性:又稱可行性,演算法中的每個命令都必須是可執行的步驟,用紙筆也能推 演完畢,以確定能解決問題。

3. 電腦程式都是遵循著演算法執行的。

4. 常見的演算法表達方式:

(1) 文字:用一般語言文字來描述執行步驟。

(2) 流程圖:用圖示符號來描述執行過程。

(3) 虛擬碼:用類似程式語言的方式來描述執行步驟。

2-2 流程控制結構

1. 以結構化的方式進行程式設計,可方便理解與維護。

2. 結構化程式分為三類:

(1) 循序結構:依指令先後 順序由上而下,一個接 著一個執行。

指令N 指令1

指令2

(2) 選擇結構:依條件判斷 的結果來執行指令,常 應用於判斷、決策。

指令2 指令1

成立 條件式 不成立

(3) 重複結構:依需求重複 執行特定指令。

前判斷式

成立 不成立 條件式

指令

後判斷式

成立 不成立 條件式

指令

2-3 流程圖設計實作

1. 我們可以手繪流程圖,或利用 Draw.io、Microsoft Word 等軟體來繪製。

2

算 法

2-1

2-2

2-3

(21)

科技廣角

西元2006 年,周以真(J

eannette

M. W

ing

)教授在美國電腦權 威期刊《C

ommunications of the

ACM》中發表了《運算思維》,宣 導「運算思維是利用電腦科學的基本概念進行問題解決、系統設計與 人類行為理解的思維模式。」也就是說,當我們碰到問題時,可以利 用運算思維來理解、分析問題,並發展出可能的解決方式。

運算思維

問題拆解

將複雜的大問題拆解為容易理解及處理 的小部分,以方便我們檢查、解決或獨 立設計。

抽象化

忽視無關緊要的細節,將問題的重要關 鍵特徵轉化成簡單明白的訊息。

演算法設計

針對問題的解決方案,制定出明確的執 行步驟與規則。

模式識別

從眾多問題中找到相似或共同的特徵,

讓我們能利用相同的方法,有效地解決 各個問題。

運算思維簡介

(22)

周以真教授舉了一個生活化的例子來說明運 算思維和我們日常生活的關係:「如果我們要做 一頓飯,既要煮飯、炒菜、還要燉肉,而且不能 菜都做好了,但飯還沒煮熟。我們該怎麼做呢?

這三項任務都需要花費資源和時間,而我們就像 是一部電腦,透過運算思維來分析問題、調配有 限的資源、規畫解決方案,最終完成所有任務。」

周教授進一步指出:「運算思維是一種思考 方法和基本技能,可以應用在生活、任何類型 的科學和工程,甚至藝術工作上。因此,所有人 都應該積極學習並使用,而非僅限於電腦科學 家。」周以真教授於運算思維的見解與推廣,對 推動電腦科學教育有重大貢獻。

學 歷

麻省理工學院 電腦科學博士

研究領域

系統安全、軟體規範與驗證、

程式語言、分散式系統

經歷摘要

哥倫比亞大學 電腦科學教授 微軟研究院 副總裁

美國國家科學基金會—

電腦與資訊科學工程部 助理主任 卡內基美隆大學 電腦學院院長 麻省理工學院 電腦科學客座副教授

周 以 真

參考文獻

相關文件

數位計算機可用作回授控制系統中的補償器或控制

路徑 I 是考慮空氣的阻擋效應所算出的運動路徑。球在真 空中的運動路徑 II 是以本章的方法計算出的。參考表 4-1 中的資料。 (取材自“ The Trajectory of a Fly Ball, ” by

各國的課程綱要均強調運算的概念性了解。我國 2009 年課程綱要談到所謂

將一條長 56cm 的綠色緞帶和一條長 42cm 的紅色緞帶剪成一樣長 的小段,且沒有剩下,則每小段緞帶最長是幾 cm?.

It represents a universally applicable attitude and skill set everyone, not just computer scientists, would be eager to learn and

命令解釋程式 作業系統 (MS-DOS,UNIX, WINDOWS 98/NT, 2000, XP, LINUX).

(Scratch,App Inventor) 發展學生計算思維和編程 技巧的教學知識

西元 1998 年,G oogle 的創辦人之一賴利佩吉發表了網 頁排序的演算法,涵蓋 G oogle