第02章 常見的演算法
2
3
4
2-1
演算法簡介
演算法(Algorithm):將解決問題的方法
演算法的表示法
流程圖(Flowchart)使用簡單明瞭的圖案、
解題策略
暴力法(Brute Force)將所有可能性列舉出 來後,再從中找出答案。 圖中的場館與道路變多,可能路線的數量 便會大量的增加,使得整個演算法變得非 常沒有效率。解題策略
貪心法(Greedy Method):選擇當下最有
只考慮當前最佳情況(如目前最短),有 時候並沒有辦法達成全局最佳解(如總路 徑最短) 將2改為5 真正的最短路徑應該是「入口企鵝館狐狸館」, 長度是7。
解題策略
分治法(Divide and Conquer)又稱各個擊破
法,也就是將問題拆解成一個個的小問題,各 個擊破後,再將這些小問題的解答合併與統整, 變成原問題的答案。 初次學習游泳時,教練經常把游泳的姿勢分成 手部划水動作 腳部踢水動作 頭部換氣動作 我們會分別練習這三個部位的姿勢,熟練之後 再組合成完整的游泳姿勢。
分治法範例
分(Divide):將數列 <4, 1, 3, 2>分割為數列 <4, 1>及<3, 2>,再進 行下一次的分,直到數 列不能再分割 治(Conquer):將分 割的數列兩兩合併,並 將數字按大小排序,直 到所有分割的數列合併 為一,且排序完畢為止。13
八皇后問題(1/2)
✓ 解 無解 ✓ 無解 ✓ ✓ ✓14
八皇后問題(2/2)
所有皇后的Y座標不相同,即𝑌𝑌𝑖𝑖 ≠ 𝑌𝑌𝑗𝑗 (如果𝑖𝑖 ≠ 𝑗𝑗) 解 所有皇后不在同一對角線上,即|𝑋𝑋𝑖𝑖 − 𝑋𝑋𝑗𝑗| ≠ |𝑌𝑌𝑖𝑖 − 𝑌𝑌𝑗𝑗| (如果𝑖𝑖 ≠ 𝑗𝑗) 是 是15
2-2
常用的演算法
1 網路流行用語「 C 位 」是指 C e nt er 、 中間、 核心位置的意思。 ✓ 解 ✓ 有理,這樣每年都是相同的人坐在C位。 提示:採上述的排序法再結合每年輪流法。或抽籤,即隨機法。或先到先搶位法。2-2
常用的演算法
氣泡排序法(Bubble Sort)是透過數個回合
氣泡排序法的例子(1/4)
考慮陣列的索引值常從0開始, 這裡從第0回合算起
選擇排序法
選擇排序法(Selection Sort)每一回合都選 出剩下的數字中最大的一個,將它排在對 應的位置(最大的排在最前面,第二大的 排在第二個,以此類推) 若要排序N個數字,需要N個回合循序搜尋法
循序搜尋法(Sequential Search)從數列的
頭走到數列的尾,逐一檢查每一個元素, 直到找到目標數值或是檢查完所有數值 (目標數值不在數列當中)為止
循序搜尋法的流程圖
二分搜尋法
二分搜尋法(Binary Search)是指從已經排 序好的數列中進行搜尋 每次都淘汰一半的數字,從剩下的數字中 尋找目標值,這個過程會不斷重複,直到 找到目標數值或是檢查過數列中所有的數 字為止。遞迴
遞迴(Recursion)是將待解的問題轉化成 一個相同類型的子問題,該子問題的解決 方法仍與原問題的解法相同,通常這個過 程會重複數次 每次的遞迴都會縮小問題的範圍 必須有終止遞迴條件,否則會無止境地遞迴在階乘運算中運用遞迴的概念
將原問題「n的階乘」拆成n乘「n-1的階 乘」,新問題「n-1的階乘」與原本的問題 類型相同 新問題比原問題的規模小,即由「n」變為 「n-1」 整個遞迴的過程,重複數次,直到規模夠 小為止,即「1的階乘」。因為「1的階乘」 規模足夠小,直接解決這個小問題,不用 再繼續遞迴2-3
演算法效能分析
使用 「複雜度」(Complexity)來評估演
算法的效能
效能分析實例(1/3)
在1到10中搜尋正確答案9,如果採用循序 搜尋,需要猜9次才能猜到正確答案;反之, 使用二分搜尋時,因為每次能去除一半的 可能性,所以只要猜3次就能猜到正確答案, 二分搜尋的效率似乎比循序搜尋快效能分析實例(2/3)
有N個數的數列中搜尋,最壞的情況下,循
序搜尋法會從頭到尾逐項搜尋,共搜尋N次
二分搜尋法如果沒有搜尋到時,每次會將
效能分析實例(3/3)
當N越來越大時,搜尋次數或搜尋時間的差