1
2
為何要學演算法(
1/2 )
排序問題( sorting ) :
11, 7, 14, 1, 5, 9, 10
↓sort
1, 5, 7, 9, 10, 11, 14
Insertion sort
Quick sort
…..
3
為何要學演算法(
2/2 )
1. 生物科技近來相當熱門,你知道如何利用電腦來幫 助解決生物上的問題嗎?你知道生物資訊嗎?
2. 你在研究多媒體資料壓縮嗎?你知道 VQ(Vector Qu antization) 與 Voronoi diagram 的關係嗎?你知 道你的壓縮方法是 heuristic 嗎?
4
演算法的目標
1. 演算法是電腦科學研究的基礎
2. 如果沒學過演算法,電腦科學的研究就無法
5
資料結構和演算法
資料結構和演算法要用程式語言來描述,才 能交由電腦執行,至於要用那一種程式語言 ;並沒有特別規定
6
演算法定義
由有限步驟所構成的集合,可以用於解決
某一個特定的問題。
7
演算法必須滿足五個條件
1. 輸入 (input) :可以由外界輸入 0 個、 1 個或多個 以上的資料。 2. 輸出 (output) :至少要有 1 個以上的輸出。 3. 明確性 (definiteness) :每個步驟都必須是明確而 不含糊的。 4. 有限性 (finiteness) :必須在有限步驟內結束。 5. 有效性 (effectiveness) :每一個步驟必須是基本 的 ( 可行的 ) ,也就是說,即使我們僅僅具有紙和 筆也可以執行這些步驟。8
搜尋
binsrch(int A[], int n, int x, int j) {
lower = 1; upper = n;
while (lower <= upper) {
mid = (lower + upper) / 2; if (x > A[mid]) lower = mid + 1; else if (x < A[mid]) upper = mid – 1; else { j = mid; return; } } } 1. n 陣列大小 2. x要搜尋目標 3. j返回值
9
Array
void mul(int a[ ][ ], int b[ ][ ], int c[ ][ ], int n) {
int i, j, k, sum; for (i=0; i < n; i++) for (j=0; j < n; j++) { sum = 0; for (k=0; k < n; k++) sum = sum+a[i][k]*b[k][j]; c[i][j] = sum; } } 1. n 陣列大小
10
Recursive(1/2)
int fact(int n) { int x, y; x = n-1; y = fact(x); return(n*y); } /* end fact */11
Recursive(2/2)
int fact(int n) { int x, y; if (n == 0) // boundary condition return(1); x = n-1; y = fact(x); return(n*y); } /* end fact */12 影響程式執行時間的因素,最簡單的有 機器的速度 演算法的好壞 演算法 (algorithm) 是一解決問題的有限步驟之程序 。 演算法的好壞,必須做複雜度的分析 (complexity ana lysis) 。 分析演算法的複雜度,必須先求出程式中每一敘述的 執行次數,並加總起來,然後求出其 Big-O 。