演算法
Teacher: 郭育倫
Mail: d95037@csie.ntu.edu.tw
課程大綱
• 「程式 = 演算法+資料結構」,這是在
學習計算機科學的基礎時常常聽到的一
句話,要發揮計算機的效能必須要有良
善的程式,要開發出良善的程式則必須
有適當的演算法。
課程大綱
• 演算法是探討如何利用有效的方法,如
Greedy Method,Dynamic Programming
等來解決進階問題的重要基礎。
• 課程中介紹各種電腦科學中常用演算法
基本概念及分析其效能與時間空間複雜
度.並配合程式實作的方式更深入了解演
算法的技巧與概念
課程大綱 (1/9)
• 複習演算法所需使用到的數學
– 標記與表示法
– 函數
– 數學歸納法
– 對數
– 集合
– 二項式定理
– 遞迴方程式
課程大綱 (2/9)
• 演算法簡介
– 什麼是演算法 (定義)
– 演算法的用途
– 演算法的考量
• 特性
• 表示
• 效能評估
• 最佳化
課程大綱 (3/9)
• 效能分析
– 最差狀況
– 平均狀況
• 時間複雜度
– Θ 符號表示
– O 符號表示
– Ω 符號表示
• 空間複雜度
課程大綱 (4/9)
• 遞迴公式
– 取代方法
– 支配方法 (Master Theorem)
• 基本資料結構
– 鏈結串列 (Link List)
– 堆疊 (Stack)
– 佇列 (Queue)
– 二元樹 (Binary tree)
課程大綱 (5/9)
• 排序
– 選擇排序 (Select Sort)
– 氣泡排序 (Bubble Sort)
– 插入排序 (Insert Sort)
– 合併排序 (Merge Sort)
– 快速排序 (Quick Sort)
– 堆積排序 (Heap Sort)
– 計數排序 (Counting Sort)
– 基數排序 (Radix Sort)
課程大綱 (6/9)
• 搜尋樹
– 線性搜尋
– 二元搜尋
– 二元搜尋樹
– 平衡樹
• AVL 樹
• 紅黑樹
• B樹
課程大綱 (7/9)
• 雜湊 (Hash)
– 雜湊函數
• 字串搜尋
• 基本圖論
– 深度優先搜尋
– 廣度優先搜尋
課程大綱 (8/9)
• 加權圖
– 最小生成樹 (minimum spanning tree)
– Prim
– Kruskal
– 最短路徑
– Dijkstra
– Bellman-Ford
– Floyd-Warshall
課程大綱 (9/9)
• 貪婪演算法 (Greedy)
– 拓樸排序
– 霍夫曼編碼
• 動態規劃 (Dynamic programming)
• etc.
教材(1/2)
• 教科書:
– 演算法概論
– 作者:蔡郁彬 胡繼陽 侯玉展
– 出版社:學貫出版社
– 出版日:2007-05-23
教材(2/2)
• 參考書目
• 中文書
– 演算法使用C++虛擬碼
– 建構式演算法
• 原文書
– Introduction to Algorithms
• 課程網頁
– http://www.csie.ntu.edu.tw/~d95037/
• 成績評量
– 平時成績:30% (含作業20%、出席率10%)
– 期中考成績:30%
– 期末考成績:40%