chapter 11 chapter 1 chapter 1 basic concept all the programs in this file are selected from ellis...
TRANSCRIPT
![Page 1: CHAPTER 11 CHAPTER 1 CHAPTER 1 BASIC CONCEPT All the programs in this file are selected from Ellis Horowitz, Sartaj Sahni, and Susan Anderson-Freed “Fundamentals](https://reader036.vdocuments.site/reader036/viewer/2022062423/5697c0301a28abf838cda93c/html5/thumbnails/1.jpg)
CHAPTER 1 1
CHAPTER 1CHAPTER 1BASIC CONCEPT
All the programs in this file are selected fromEllis Horowitz, Sartaj Sahni, and Susan Anderson-Freed“Fundamentals of Data Structures in C”,Computer Science Press, 1992.
![Page 2: CHAPTER 11 CHAPTER 1 CHAPTER 1 BASIC CONCEPT All the programs in this file are selected from Ellis Horowitz, Sartaj Sahni, and Susan Anderson-Freed “Fundamentals](https://reader036.vdocuments.site/reader036/viewer/2022062423/5697c0301a28abf838cda93c/html5/thumbnails/2.jpg)
CHAPTER 1 2
Data Structure
What is data structure?Ans. Data structure 探討一群相關資料的資料表示方
法與資料運作方法目的 : 使用最有效率的方式 , 對一群相關資料進行處理如何設計 :
1. 找出對該資料的各種運算2. 考慮最適當的 Data Structure, 使得各種運算的 效率最佳3. 設計一個完整的 Algorithm
![Page 3: CHAPTER 11 CHAPTER 1 CHAPTER 1 BASIC CONCEPT All the programs in this file are selected from Ellis Horowitz, Sartaj Sahni, and Susan Anderson-Freed “Fundamentals](https://reader036.vdocuments.site/reader036/viewer/2022062423/5697c0301a28abf838cda93c/html5/thumbnails/3.jpg)
CHAPTER 1 3
How to create programs
Requirements: What inputs, functions, and outputs
Analysis: bottom-up vs. top-down
Design: data objects and operations
Refinement and Coding Verification
Program Proving Testing Debugging
![Page 4: CHAPTER 11 CHAPTER 1 CHAPTER 1 BASIC CONCEPT All the programs in this file are selected from Ellis Horowitz, Sartaj Sahni, and Susan Anderson-Freed “Fundamentals](https://reader036.vdocuments.site/reader036/viewer/2022062423/5697c0301a28abf838cda93c/html5/thumbnails/4.jpg)
CHAPTER 1 4
Algorithm Definition
An algorithm is a finite set of instructions that accomplishes a particular task.
Criteria Input: zero more quantities are externally supplied. Output: at least one quantity is produced. definiteness: clear and unambiguous finiteness: terminate after a finite number of steps effectiveness: instruction is basic enough to be
carried out
![Page 5: CHAPTER 11 CHAPTER 1 CHAPTER 1 BASIC CONCEPT All the programs in this file are selected from Ellis Horowitz, Sartaj Sahni, and Susan Anderson-Freed “Fundamentals](https://reader036.vdocuments.site/reader036/viewer/2022062423/5697c0301a28abf838cda93c/html5/thumbnails/5.jpg)
CHAPTER 1 5
Algorithm
One distinguishes between an algorithm and a program, the latter of which does not have to satisfy the fourth condition (Finiteness).
For example, we can think of an operating system that continues in a wait loop until more jobs are entered.
![Page 6: CHAPTER 11 CHAPTER 1 CHAPTER 1 BASIC CONCEPT All the programs in this file are selected from Ellis Horowitz, Sartaj Sahni, and Susan Anderson-Freed “Fundamentals](https://reader036.vdocuments.site/reader036/viewer/2022062423/5697c0301a28abf838cda93c/html5/thumbnails/6.jpg)
CHAPTER 1 6
在已排序的資料中找值 18
Sequential Search
第 7 次找到
Binary Search
第 3 次找到
3
4
6
8
9
15
18
3
4
6
8
9
15
18
![Page 7: CHAPTER 11 CHAPTER 1 CHAPTER 1 BASIC CONCEPT All the programs in this file are selected from Ellis Horowitz, Sartaj Sahni, and Susan Anderson-Freed “Fundamentals](https://reader036.vdocuments.site/reader036/viewer/2022062423/5697c0301a28abf838cda93c/html5/thumbnails/7.jpg)
CHAPTER 1 7
Problem Devise a program that sorts a set of n>= 1 integers
Solution I From those integers that are currently unsorted, find
the smallest and place it next in the sorted list Solution II
for (i= 0; i< n; i++){
Examine list[i] to list[n-1] and suppose that the smallest integer is list[min];
Interchange list[i] and list[min];
}
Translating a Problem into an Algorithm
![Page 8: CHAPTER 11 CHAPTER 1 CHAPTER 1 BASIC CONCEPT All the programs in this file are selected from Ellis Horowitz, Sartaj Sahni, and Susan Anderson-Freed “Fundamentals](https://reader036.vdocuments.site/reader036/viewer/2022062423/5697c0301a28abf838cda93c/html5/thumbnails/8.jpg)
CHAPTER 1 8
Translating a Problem into an Algorithm Solution III
#define swap(x,y,t) ((t)= (x), (x)= (y), (y)= (t))
void sort(int list[], int n){ int i, j, min, temp; for (i= 0; i< n-1; i++){ min= i; for (j= i+1; j< n; j++){ if (list[j]< list[min]) min= j; } swap(list[i], list[min], temp);}
上面 swap 意思即類似void swap(int *x, int *y){ int temp= *x; *x= *y; *y= temp;}
![Page 9: CHAPTER 11 CHAPTER 1 CHAPTER 1 BASIC CONCEPT All the programs in this file are selected from Ellis Horowitz, Sartaj Sahni, and Susan Anderson-Freed “Fundamentals](https://reader036.vdocuments.site/reader036/viewer/2022062423/5697c0301a28abf838cda93c/html5/thumbnails/9.jpg)
CHAPTER 1 9
Data Type
Data TypeA data type is a collection of objects and a set of operations that act on those objects.
Example of "int" Objects: 0, +1, -1, ..., Int_Max, Int_Min Operations: arithmetic(+, -, *, /, and %), testing (equa
lity/inequality), assigns, functions
![Page 10: CHAPTER 11 CHAPTER 1 CHAPTER 1 BASIC CONCEPT All the programs in this file are selected from Ellis Horowitz, Sartaj Sahni, and Susan Anderson-Freed “Fundamentals](https://reader036.vdocuments.site/reader036/viewer/2022062423/5697c0301a28abf838cda93c/html5/thumbnails/10.jpg)
CHAPTER 1 10
Data encapsulation and Data abstraction
Data encapsulation or Information hiding 是把資料物件的內部程式碼內容隱藏不被外部的使用者知道目的 :1. 讓往後可能的修改能夠局限在此程式單元之中2. 讓程式單元不需隨著 ADT 內部的表示方式的改
變而修改外部的使用方式3. 可提高程式的可重用度 , 可讀性 , 方便除錯…
Data abstraction 是將一個資料物件的 specification 和 implementation 分離目的 : 只描述主要特徵而隱藏大部分的次要特徵 , 可以將複 雜的物件加以簡化
![Page 11: CHAPTER 11 CHAPTER 1 CHAPTER 1 BASIC CONCEPT All the programs in this file are selected from Ellis Horowitz, Sartaj Sahni, and Susan Anderson-Freed “Fundamentals](https://reader036.vdocuments.site/reader036/viewer/2022062423/5697c0301a28abf838cda93c/html5/thumbnails/11.jpg)
CHAPTER 1 11
Abstract Data Type
Abstract Data TypeAn abstract data type (ADT) is a data type that is organized in such a way that the specification of the objects and the operations on the objects is separated from the representation of the objects and the implementation of the operations.
ADT Operations — only the operation name and its parameters are visible to the user — through interface
Why abstract data type ? implementation-independent
不管如何 (How)作,只管作了什麼 (What) Abstraction is …
Generalization of operations with unspecified implementation
![Page 12: CHAPTER 11 CHAPTER 1 CHAPTER 1 BASIC CONCEPT All the programs in this file are selected from Ellis Horowitz, Sartaj Sahni, and Susan Anderson-Freed “Fundamentals](https://reader036.vdocuments.site/reader036/viewer/2022062423/5697c0301a28abf838cda93c/html5/thumbnails/12.jpg)
CHAPTER 1 12
Abstract data type model
![Page 13: CHAPTER 11 CHAPTER 1 CHAPTER 1 BASIC CONCEPT All the programs in this file are selected from Ellis Horowitz, Sartaj Sahni, and Susan Anderson-Freed “Fundamentals](https://reader036.vdocuments.site/reader036/viewer/2022062423/5697c0301a28abf838cda93c/html5/thumbnails/13.jpg)
CHAPTER 1 13
Classifying the Functions of a Data Type
Creator/constructor Create a new instance of the designated type
Transformers Also create an instance of the designated type by
using one or more other instances Observers/reporters
Provide information about an instance of the type, but they do not change the instance
![Page 14: CHAPTER 11 CHAPTER 1 CHAPTER 1 BASIC CONCEPT All the programs in this file are selected from Ellis Horowitz, Sartaj Sahni, and Susan Anderson-Freed “Fundamentals](https://reader036.vdocuments.site/reader036/viewer/2022062423/5697c0301a28abf838cda93c/html5/thumbnails/14.jpg)
CHAPTER 1 14
*Structure 1.1:Abstract data type Natural_Number (p.17)structure Natural_Number is (denoted by Nat_No) objects: an ordered subrange of the integers starting at zero and ending at the maximum integer (INT_MAX) on the computer functions: for all x, y Nat_Number; TRUE, FALSE Boolean and where +, -, <, and == are the usual integer operations. Nat_No Zero ( ) ::= 0 Boolean Is_Zero(x) ::= if (x) return FALSE else return TRUE Nat_No Add(x, y) ::= if ((x+y) <= INT_MAX) return x+y else return INT_MAX Boolean Equal(x,y) ::= if (x== y) return TRUE else return FALSE Nat_No Successor(x) ::= if (x == INT_MAX) return x else return x+1 Nat_No Subtract(x,y) ::= if (x<y) return 0 else return x-y end Natural_Number
Creator
Observer
Transformer
![Page 15: CHAPTER 11 CHAPTER 1 CHAPTER 1 BASIC CONCEPT All the programs in this file are selected from Ellis Horowitz, Sartaj Sahni, and Susan Anderson-Freed “Fundamentals](https://reader036.vdocuments.site/reader036/viewer/2022062423/5697c0301a28abf838cda93c/html5/thumbnails/15.jpg)
CHAPTER 1 15
Play with ADT
Add(Zero(),y) ::= return yAdd(Successor(x),y) ::=
return Successor(Add(x,y))
Equal(Zero(),Zero()) ::= return TRUEEqual(Successor(x),Zero()) ::=
return FALSE Equal(Successor(x), Successor(y)) ::=
return Equal(x, y)
![Page 16: CHAPTER 11 CHAPTER 1 CHAPTER 1 BASIC CONCEPT All the programs in this file are selected from Ellis Horowitz, Sartaj Sahni, and Susan Anderson-Freed “Fundamentals](https://reader036.vdocuments.site/reader036/viewer/2022062423/5697c0301a28abf838cda93c/html5/thumbnails/16.jpg)
CHAPTER 1 16
Play with ADT (cont’d)
0Zero()1Successor(Zero())2Successor(Successor(Zero()))1 + 2 = ?
…
1 + 2 == 3 ?
![Page 17: CHAPTER 11 CHAPTER 1 CHAPTER 1 BASIC CONCEPT All the programs in this file are selected from Ellis Horowitz, Sartaj Sahni, and Susan Anderson-Freed “Fundamentals](https://reader036.vdocuments.site/reader036/viewer/2022062423/5697c0301a28abf838cda93c/html5/thumbnails/17.jpg)
CHAPTER 1 17
Recursive Algorithms
Direct recursion Functions call themselves
Indirect recursion Functions call other functions that invoke the
calling function again
Any function that we can write using assignment, if-else, and while statements can be written recursively.
![Page 18: CHAPTER 11 CHAPTER 1 CHAPTER 1 BASIC CONCEPT All the programs in this file are selected from Ellis Horowitz, Sartaj Sahni, and Susan Anderson-Freed “Fundamentals](https://reader036.vdocuments.site/reader036/viewer/2022062423/5697c0301a28abf838cda93c/html5/thumbnails/18.jpg)
CHAPTER 1 18
Recursive algorithm
How to determine that express an algorithm recursively ? The problem itself is defined recursively Statements: if-else and while can be written recursively
How to design recursive algorithm1. 找出遞迴關係 找出遞迴關係才能夠對問題進行切割
2. 找出終止條件 找出終止條件避免無窮遞迴下去 非常重
要 !!
![Page 19: CHAPTER 11 CHAPTER 1 CHAPTER 1 BASIC CONCEPT All the programs in this file are selected from Ellis Horowitz, Sartaj Sahni, and Susan Anderson-Freed “Fundamentals](https://reader036.vdocuments.site/reader036/viewer/2022062423/5697c0301a28abf838cda93c/html5/thumbnails/19.jpg)
CHAPTER 1 19
遞迴和迴圈的比較
遞迴的優點 : 簡潔易懂 缺點 : 執行效率差因為執行時需要對
遞迴副程式進行呼叫 , 由於呼叫遞 迴副程式需要處理額外的工作
迴圈的優點 : 執行效率佳 缺點 : 有的問題不易用迴圈來表示 ,
即使寫得出來也低階難懂。 如河內塔問題
哪些工作 ?Trace 一個
![Page 20: CHAPTER 11 CHAPTER 1 CHAPTER 1 BASIC CONCEPT All the programs in this file are selected from Ellis Horowitz, Sartaj Sahni, and Susan Anderson-Freed “Fundamentals](https://reader036.vdocuments.site/reader036/viewer/2022062423/5697c0301a28abf838cda93c/html5/thumbnails/20.jpg)
CHAPTER 1 20
Binary Search
int binsearch(int list[], int searchnum, int left, int right){// search list[0]<= list[1]<=...<=list[n-1] for searchnum int middle; while (left<= right){ middle= (left+ right)/2; switch(compare(list[middle], searchnum)){ case -1: left= middle+ 1;
break; case 0: return middle; case 1: right= middle- 1; } } return -1;}
int compare(int x, int y){ if (x< y) return -1; else if (x== y) return 0; else return 1;}
int compare(int x, int y){ if (x< y) return -1; else if (x== y) return 0; else return 1;}
![Page 21: CHAPTER 11 CHAPTER 1 CHAPTER 1 BASIC CONCEPT All the programs in this file are selected from Ellis Horowitz, Sartaj Sahni, and Susan Anderson-Freed “Fundamentals](https://reader036.vdocuments.site/reader036/viewer/2022062423/5697c0301a28abf838cda93c/html5/thumbnails/21.jpg)
CHAPTER 1 21
Recursive Implementation of Binary Search
int binsearch(int list[], int searchnum, int left, int right){// search list[0]<= list[1]<=...<=list[n-1] for searchnumint middle; if (left<= right){ middle= (left+ right)/2; switch(compare(list[middle], searchnum)){ case -1:return binsearch(list, searchnum, middle+1, right); case 0: return middle; case 1: return binsearch(list, searchnum, left, middle- 1); } } return -1;}
![Page 22: CHAPTER 11 CHAPTER 1 CHAPTER 1 BASIC CONCEPT All the programs in this file are selected from Ellis Horowitz, Sartaj Sahni, and Susan Anderson-Freed “Fundamentals](https://reader036.vdocuments.site/reader036/viewer/2022062423/5697c0301a28abf838cda93c/html5/thumbnails/22.jpg)
CHAPTER 1 22
河內塔問題 有三根木樁 , 在其中一根木樁上放上 N 個鐵盤 , 規則是 :
1. 一次移動一個鐵盤 .2. 小的鐵盤永遠在大鐵盤的上方 .
請問將 N 個鐵盤全部移動到另一鐵盤需要多少次 ??? 設三個木樁為 x , y , z, 數量為 n, 函式取名為為 Hanoi (n , x , y ,
z)1. 當 N 為 1 時表示只要再移動一次就完成工作 . 也就是只要把 一個鐵盤從 x 移到 z 就完成工作 .2. 當 N 不為 1 時作 3 個動作 . ㄅ . 執行 Hanoi(n-1,x,z,y); ㄆ . 將一個鐵盤從 x 移到 z; ㄇ . 執行 Hanoi(n-1,y,x,z);
![Page 23: CHAPTER 11 CHAPTER 1 CHAPTER 1 BASIC CONCEPT All the programs in this file are selected from Ellis Horowitz, Sartaj Sahni, and Susan Anderson-Freed “Fundamentals](https://reader036.vdocuments.site/reader036/viewer/2022062423/5697c0301a28abf838cda93c/html5/thumbnails/23.jpg)
CHAPTER 1 23
![Page 24: CHAPTER 11 CHAPTER 1 CHAPTER 1 BASIC CONCEPT All the programs in this file are selected from Ellis Horowitz, Sartaj Sahni, and Susan Anderson-Freed “Fundamentals](https://reader036.vdocuments.site/reader036/viewer/2022062423/5697c0301a28abf838cda93c/html5/thumbnails/24.jpg)
CHAPTER 1 24
河內塔程式碼
void Hanoi(int n, char x, char y, char z){
if (n > 1) {
Hanoi(n-1,x,z,y);printf("Move disk %d from %c to %c.\n",n,x,z);Hanoi(n-1,y,x,z);
} else{
printf("Move disk %d from %c to %c.\n",n,x,z); }
}
![Page 25: CHAPTER 11 CHAPTER 1 CHAPTER 1 BASIC CONCEPT All the programs in this file are selected from Ellis Horowitz, Sartaj Sahni, and Susan Anderson-Freed “Fundamentals](https://reader036.vdocuments.site/reader036/viewer/2022062423/5697c0301a28abf838cda93c/html5/thumbnails/25.jpg)
CHAPTER 1 25
Hanoi (n , x , y , z) n=4 的結果執行 Hanoi(3,x,z,y). 執行 Hanoi(2,x,y,z). 執行 Hanoi(1,x,z,y). 列印 Move disk 1 from x to y. 列印 Move disk 2 from x to z. 執行 Hanoi(1,y,x,z). 列印 Move disk 1 from y to z. 列印 Move disk 3 from x to y. 執行 Hanoi(2,z,x,y). 執行 Hanoi(1,z,y,x). 列印 Move disk 1 from z to x. 列印 Move disk 2 from z to y.
![Page 26: CHAPTER 11 CHAPTER 1 CHAPTER 1 BASIC CONCEPT All the programs in this file are selected from Ellis Horowitz, Sartaj Sahni, and Susan Anderson-Freed “Fundamentals](https://reader036.vdocuments.site/reader036/viewer/2022062423/5697c0301a28abf838cda93c/html5/thumbnails/26.jpg)
CHAPTER 1 26
執行 Hanoi(1,x,z,y). 列印 Move disk 1 from x to y. 列印 Move disk 4 from x to z. 執行 Hanoi(3,y,x,z). 執行 Hanoi(2,y,z,x). 執行 Hanoi(1,y,x,z). 列印 Move disk 1 from y to z. 列印 Move disk 2 from y to x. 執行 Hanoi(1,z,y,x) 列印 Move disk 1 from z to x. 列印 Move disk 3 from y to z. 執行 Hanoi(2,x,y,z). 執行 Hanoi(1,x,z,y). 列印 Move disk 1 from x to y. 列印 Move disk 2 from x to z. 執行 Hanoi(1,y,x,z). 列印 Move disk 1 from y to z.
![Page 27: CHAPTER 11 CHAPTER 1 CHAPTER 1 BASIC CONCEPT All the programs in this file are selected from Ellis Horowitz, Sartaj Sahni, and Susan Anderson-Freed “Fundamentals](https://reader036.vdocuments.site/reader036/viewer/2022062423/5697c0301a28abf838cda93c/html5/thumbnails/27.jpg)
CHAPTER 1 27
Performance Analysis (machine independent)
Space and Time Does the program efficiently use primary and secondary
storage? Is the program's running time acceptable for the task?
Evaluate a program generally Does the program meet the original specifications of the
task? Does it work correctly? Does the program contain documentation that show how
to use it and how it works? Does the program effectively use functions to create
logical units? Is the program's code readable?
![Page 28: CHAPTER 11 CHAPTER 1 CHAPTER 1 BASIC CONCEPT All the programs in this file are selected from Ellis Horowitz, Sartaj Sahni, and Susan Anderson-Freed “Fundamentals](https://reader036.vdocuments.site/reader036/viewer/2022062423/5697c0301a28abf838cda93c/html5/thumbnails/28.jpg)
CHAPTER 1 28
Performance Analysis(Cont.)
Evaluate a programMeet specifications, Work correctly, Good user-interface, Well-documentation,Readable, Effectively use functions, Running time acceptable, Efficiently use space/storage
How to achieve them? Good programming style, experience, and practice Discuss and think
Practice Practice Prac
tice
ThinkThinkThink
![Page 29: CHAPTER 11 CHAPTER 1 CHAPTER 1 BASIC CONCEPT All the programs in this file are selected from Ellis Horowitz, Sartaj Sahni, and Susan Anderson-Freed “Fundamentals](https://reader036.vdocuments.site/reader036/viewer/2022062423/5697c0301a28abf838cda93c/html5/thumbnails/29.jpg)
CHAPTER 1 29
S(P)= c+ Sp(I)
The space needed is the sum of Fixed space and Variable space
Fixed space: c Includes the instructions, variables, and constant
s Independent of the number and size of I/O
Variable space: Sp(I) Includes dynamic allocation, functions' recursion
Total space of any program S(P)= c+ Sp(Instance)
P: a programI: instance
(input, output)
![Page 30: CHAPTER 11 CHAPTER 1 CHAPTER 1 BASIC CONCEPT All the programs in this file are selected from Ellis Horowitz, Sartaj Sahni, and Susan Anderson-Freed “Fundamentals](https://reader036.vdocuments.site/reader036/viewer/2022062423/5697c0301a28abf838cda93c/html5/thumbnails/30.jpg)
CHAPTER 1 30
*Program 1.9: Simple arithmetic function (p.19)float abc(float a, float b, float c){ return a + b + b * c + (a + b - c) / (a + b) + 4.00; }
*Program 1.10: Iterative function for summing a list of numbers (p.20)float sum(float list[ ], int n){ float tempsum = 0; int i; for (i = 0; i<n; i++) tempsum += list [i]; return tempsum;}
Sabc(I) = 0
Ssum(I) = 0
Recall: pass the address of thefirst element of the array &pass by value
![Page 31: CHAPTER 11 CHAPTER 1 CHAPTER 1 BASIC CONCEPT All the programs in this file are selected from Ellis Horowitz, Sartaj Sahni, and Susan Anderson-Freed “Fundamentals](https://reader036.vdocuments.site/reader036/viewer/2022062423/5697c0301a28abf838cda93c/html5/thumbnails/31.jpg)
CHAPTER 1 31
*Program 1.11: Recursive function for summing a list of numbers (p.20)float rsum(float list[ ], int n){ if (n) return rsum(list, n-1) + list[n-1]; return 0; }
*Figure 1.1: Space needed for one recursive call of Program 1.11 (p.21) ( 以 16bit x86 small/near 為例 )
Type Name Number of bytes parameter: float parameter: integer return address:(used internally)
list [ ] n
2 2 2(unless a far address)
TOTAL per recursive call 6
Ssum(I)=Ssum(n)=6n
*
![Page 32: CHAPTER 11 CHAPTER 1 CHAPTER 1 BASIC CONCEPT All the programs in this file are selected from Ellis Horowitz, Sartaj Sahni, and Susan Anderson-Freed “Fundamentals](https://reader036.vdocuments.site/reader036/viewer/2022062423/5697c0301a28abf838cda93c/html5/thumbnails/32.jpg)
CHAPTER 1 32
Time Complexity
Total time T(P)= compile time + run (or execution) time May run it many times without recompilation. Run tim
e How to evaluate?
+ - * / … ( 最細的估計 ) Use the system clock 直接用量的比較省事 Number of steps performed ( 中等的估計 )
machine-independent Instance 及所費時間函數的趨勢 ( 粗略的估計 , p.39)
Definition of a program step A program step is a syntactically or semantically meaningful
program segment whose execution time is independent of the instance characteristics
![Page 33: CHAPTER 11 CHAPTER 1 CHAPTER 1 BASIC CONCEPT All the programs in this file are selected from Ellis Horowitz, Sartaj Sahni, and Susan Anderson-Freed “Fundamentals](https://reader036.vdocuments.site/reader036/viewer/2022062423/5697c0301a28abf838cda93c/html5/thumbnails/33.jpg)
CHAPTER 1 33
Methods to compute the step count
Introduce variable count into programs Tabular method
Determine the total number of steps contributed by each statement steps_per_statement * frequency_for_that_statement s/e, steps/execution
add up the contribution of all statements
![Page 34: CHAPTER 11 CHAPTER 1 CHAPTER 1 BASIC CONCEPT All the programs in this file are selected from Ellis Horowitz, Sartaj Sahni, and Susan Anderson-Freed “Fundamentals](https://reader036.vdocuments.site/reader036/viewer/2022062423/5697c0301a28abf838cda93c/html5/thumbnails/34.jpg)
CHAPTER 1 34
*Program 1.12: Program 1.10 with count statements (p.23)
float sum(float list[ ], int n){ float tempsum = 0; count++; /* for assignment */ int i; for (i = 0; i < n; i++) { count++; /*for the for loop */ tempsum += list[i]; count++; /* for assignment */ } count++; /* last execution of for */
count++; /* for return */ return tempsum; } 2n + 3 steps
Iterative summing of a list of numbers
![Page 35: CHAPTER 11 CHAPTER 1 CHAPTER 1 BASIC CONCEPT All the programs in this file are selected from Ellis Horowitz, Sartaj Sahni, and Susan Anderson-Freed “Fundamentals](https://reader036.vdocuments.site/reader036/viewer/2022062423/5697c0301a28abf838cda93c/html5/thumbnails/35.jpg)
CHAPTER 1 35
*Program 1.13: Simplified version of Program 1.12 (p.23)
float sum(float list[ ], int n){ float tempsum = 0; int i; for (i = 0; i < n; i++) count += 2; count += 3; return 0;}
2n + 3 steps
![Page 36: CHAPTER 11 CHAPTER 1 CHAPTER 1 BASIC CONCEPT All the programs in this file are selected from Ellis Horowitz, Sartaj Sahni, and Susan Anderson-Freed “Fundamentals](https://reader036.vdocuments.site/reader036/viewer/2022062423/5697c0301a28abf838cda93c/html5/thumbnails/36.jpg)
CHAPTER 1 36
*Program 1.14: Program 1.11 with count statements added (p.24)
float rsum(float list[ ], int n){
count++; /*for if conditional */if (n) {
count++; /* for return and rsum invocation */ return rsum(list, n-1) + list[n-1]; } count++; return list[0];} 2n+2 steps
Recursive summing of a list of numbers
![Page 37: CHAPTER 11 CHAPTER 1 CHAPTER 1 BASIC CONCEPT All the programs in this file are selected from Ellis Horowitz, Sartaj Sahni, and Susan Anderson-Freed “Fundamentals](https://reader036.vdocuments.site/reader036/viewer/2022062423/5697c0301a28abf838cda93c/html5/thumbnails/37.jpg)
CHAPTER 1 37
*Program 1.15: Matrix addition (p.25)
void add( int a[ ] [MAX_SIZE], int b[ ] [MAX_SIZE], int c [ ] [MAX_SIZE], int rows, int cols){ int i, j; for (i = 0; i < rows; i++) for (j= 0; j < cols; j++) c[i][j] = a[i][j] +b[i][j]; }
Matrix addition
![Page 38: CHAPTER 11 CHAPTER 1 CHAPTER 1 BASIC CONCEPT All the programs in this file are selected from Ellis Horowitz, Sartaj Sahni, and Susan Anderson-Freed “Fundamentals](https://reader036.vdocuments.site/reader036/viewer/2022062423/5697c0301a28abf838cda93c/html5/thumbnails/38.jpg)
CHAPTER 1 38
*Program 1.16: Matrix addition with count statements (p.25)
void add(int a[ ][MAX_SIZE], int b[ ][MAX_SIZE], int c[ ][MAX_SIZE], int row, int cols ){ int i, j; for (i = 0; i < rows; i++){ count++; /* for i for loop */ for (j = 0; j < cols; j++) { count++; /* for j for loop */ c[i][j] = a[i][j] + b[i][j]; count++; /* for assignment statement */ } count++; /* last time of j for loop */ } count++; /* last time of i for loop */}
2rows * cols + 2 rows + 1
![Page 39: CHAPTER 11 CHAPTER 1 CHAPTER 1 BASIC CONCEPT All the programs in this file are selected from Ellis Horowitz, Sartaj Sahni, and Susan Anderson-Freed “Fundamentals](https://reader036.vdocuments.site/reader036/viewer/2022062423/5697c0301a28abf838cda93c/html5/thumbnails/39.jpg)
CHAPTER 1 39
*Program 1.17: Simplification of Program 1.16 (p.26)
void add(int a[ ][MAX_SIZE], int b [ ][MAX_SIZE], int c[ ][MAX_SIZE], int rows, int cols){ int i, j; for( i = 0; i < rows; i++) { for (j = 0; j < cols; j++) count += 2; count += 2; } count++; } 2rows cols + 2rows +1
Suggestion: Interchange the loops when rows >> cols
![Page 40: CHAPTER 11 CHAPTER 1 CHAPTER 1 BASIC CONCEPT All the programs in this file are selected from Ellis Horowitz, Sartaj Sahni, and Susan Anderson-Freed “Fundamentals](https://reader036.vdocuments.site/reader036/viewer/2022062423/5697c0301a28abf838cda93c/html5/thumbnails/40.jpg)
CHAPTER 1 40
*Figure 1.2: Step count table for Program 1.10 (p.26)
Statement s/e Frequency Total steps
float sum(float list[ ], int n){ float tempsum = 0; int i; for(i=0; i <n; i++)
tempsum += list[i]; return tempsum;}
0 0 00 0 01 1 10 0 01 n+1 n+11 n n1 1 10 0 0
Total 2n+3
Tabular Method
steps/execution
Iterative function to sum a list of numbers
![Page 41: CHAPTER 11 CHAPTER 1 CHAPTER 1 BASIC CONCEPT All the programs in this file are selected from Ellis Horowitz, Sartaj Sahni, and Susan Anderson-Freed “Fundamentals](https://reader036.vdocuments.site/reader036/viewer/2022062423/5697c0301a28abf838cda93c/html5/thumbnails/41.jpg)
CHAPTER 1 41
*Figure 1.3: Step count table for recursive summing function (p.27)
Statement s/e Frequency Total steps
float rsum(float list[ ], int n){ if (n) return rsum(list, n-1)+list[n-1]; return list[0];}
0 0 00 0 01 n+1 n+11 n n1 1 10 0 0
Total 2n+2
Recursive Function to sum of a list of numbers
![Page 42: CHAPTER 11 CHAPTER 1 CHAPTER 1 BASIC CONCEPT All the programs in this file are selected from Ellis Horowitz, Sartaj Sahni, and Susan Anderson-Freed “Fundamentals](https://reader036.vdocuments.site/reader036/viewer/2022062423/5697c0301a28abf838cda93c/html5/thumbnails/42.jpg)
CHAPTER 1 42
*Figure 1.4: Step count table for matrix addition (p.27)
Statement s/e Frequency Total steps
Void add (int a[ ][MAX_SIZE]‧ ‧ ‧ ){ int i, j; for (i = 0; i < row; i++) for (j=0; j< cols; j++) c[i][j] = a[i][j] + b[i][j];}
0 0 00 0 00 0 01 rows+1 rows+11 rows‧ (cols+1) rows‧ cols+rows1 rows‧ cols rows‧ cols0 0 0
Total 2rows‧ cols+2rows+1
Matrix Addition
![Page 43: CHAPTER 11 CHAPTER 1 CHAPTER 1 BASIC CONCEPT All the programs in this file are selected from Ellis Horowitz, Sartaj Sahni, and Susan Anderson-Freed “Fundamentals](https://reader036.vdocuments.site/reader036/viewer/2022062423/5697c0301a28abf838cda93c/html5/thumbnails/43.jpg)
CHAPTER 1 43
Asymptotic Notation(O, , )
Exact step count Compare the time complexity of two programs that
computing the same function Difficult task of most of programs
Asymptotic notation Big “oh”
upper bound(current trend) Omega
lower bound Theta
upper and lower bound
![Page 44: CHAPTER 11 CHAPTER 1 CHAPTER 1 BASIC CONCEPT All the programs in this file are selected from Ellis Horowitz, Sartaj Sahni, and Susan Anderson-Freed “Fundamentals](https://reader036.vdocuments.site/reader036/viewer/2022062423/5697c0301a28abf838cda93c/html5/thumbnails/44.jpg)
CHAPTER 1 44
Asymptotic Notation O
Definition f(n)= O(g(n)) iff there exist positive constants c and n0 suc
h that f(n)<= cg(n) for all n, n>= n0
Examples 3n+ 2= O(n) as 3n+ 2<= 4n for all n>= 2 10n2+ 4n+ 2= O(n2) as 10n2+ 4n+ 2<= 11n2 for n>= 5 3n+2<> O(1), 10n2+ 4n+ 2<> O(n)
Remarks g(n) is upper bound, the least? ( 估 algorithm, 作答時… )
n=O(n2)=O(n2.5)= O(n3)= O(2n) O(1): constant, O(n): linear, O(n2): quadratic, O(n3): cubic,
and O(2n): exponential ( 各舉一例 )
![Page 45: CHAPTER 11 CHAPTER 1 CHAPTER 1 BASIC CONCEPT All the programs in this file are selected from Ellis Horowitz, Sartaj Sahni, and Susan Anderson-Freed “Fundamentals](https://reader036.vdocuments.site/reader036/viewer/2022062423/5697c0301a28abf838cda93c/html5/thumbnails/45.jpg)
CHAPTER 1 45
Asymptotic Notation
Definition f(n)= (g(n)) iff there exist positive constants c and n0 s
uch that f(n)>= cg(n) for all n, n>= n0
Examples 3n+ 2= (n) as 3n+ 2>= 3n for n>= 1 10n2+ 4n+ 2= (n2) as 10n2+4n+ 2>= n2 for n>= 1 6*2n+ n2= (2n) as 6*2n+ n2 >= 2n for n>= 1
Remarks lower bound, the largest ? (used for problem)
3n+3= (1), 10n2+4n+2= (n); 6*2n+ n2= (n100) Theorem
If f(n)= amnm+ ...+ a1n+ a0 and am> 0, then f(n)= (nm)
![Page 46: CHAPTER 11 CHAPTER 1 CHAPTER 1 BASIC CONCEPT All the programs in this file are selected from Ellis Horowitz, Sartaj Sahni, and Susan Anderson-Freed “Fundamentals](https://reader036.vdocuments.site/reader036/viewer/2022062423/5697c0301a28abf838cda93c/html5/thumbnails/46.jpg)
CHAPTER 1 46
Asymptotic Notation
Definition f(n)= (g(n)) iff there exist positive constants c1, c2, and n0 s
uch that c1g(n)<= f(n) <= c2g(n) for all n, n>= n0
Examples 3n+2=(n) as 3n+2>=3n for n>1 and 3n+2<=4n for all n>= 2 10n2+ 4n+ 2= (n2); 6*2n+n2= (2n)
Remarks Both an upper and lower bound 3n+2!=(1); 10n2+4n+ 2!= (n)
Theorem If f(n)= amnm+ ... +a1n+ a0 and am> 0, then f(n)= (nm)
![Page 47: CHAPTER 11 CHAPTER 1 CHAPTER 1 BASIC CONCEPT All the programs in this file are selected from Ellis Horowitz, Sartaj Sahni, and Susan Anderson-Freed “Fundamentals](https://reader036.vdocuments.site/reader036/viewer/2022062423/5697c0301a28abf838cda93c/html5/thumbnails/47.jpg)
CHAPTER 1 47
Example of Time Complexity Analysis
Statement Asymptotic complexity
void add(int a[][Max.......) 0{ 0 int i, j; 0 for(i= 0; i< rows; i++) (rows) for(j=0; j< cols; j++) (rows*cols) c[i][j]= a[i][j]+ b[i][j]; (rows*cols)} 0
Total (rows*cols)
![Page 48: CHAPTER 11 CHAPTER 1 CHAPTER 1 BASIC CONCEPT All the programs in this file are selected from Ellis Horowitz, Sartaj Sahni, and Susan Anderson-Freed “Fundamentals](https://reader036.vdocuments.site/reader036/viewer/2022062423/5697c0301a28abf838cda93c/html5/thumbnails/48.jpg)
CHAPTER 1 48
Example of Time Complexity Analysis(Cont.)
int binsearch(int list[], int left, int right){ int middle; while (left<= right){ middle= (left+ right)/2; switch(compare(list[middle], searchnum)){ case -1: left= middle+ 1;
break; case 0: return middle; case 1: right= middle- 1; } } return -1;}
worst case (log n)best case (1)
![Page 49: CHAPTER 11 CHAPTER 1 CHAPTER 1 BASIC CONCEPT All the programs in this file are selected from Ellis Horowitz, Sartaj Sahni, and Susan Anderson-Freed “Fundamentals](https://reader036.vdocuments.site/reader036/viewer/2022062423/5697c0301a28abf838cda93c/html5/thumbnails/49.jpg)
CHAPTER 1 49
*Figure 1.9:Times on a 1 billion instruction per second computer(p.40)
![Page 50: CHAPTER 11 CHAPTER 1 CHAPTER 1 BASIC CONCEPT All the programs in this file are selected from Ellis Horowitz, Sartaj Sahni, and Susan Anderson-Freed “Fundamentals](https://reader036.vdocuments.site/reader036/viewer/2022062423/5697c0301a28abf838cda93c/html5/thumbnails/50.jpg)
CHAPTER 1 50
*Figure 1.8:Plot of function values(p.39)
nlogn
n
logn
![Page 51: CHAPTER 11 CHAPTER 1 CHAPTER 1 BASIC CONCEPT All the programs in this file are selected from Ellis Horowitz, Sartaj Sahni, and Susan Anderson-Freed “Fundamentals](https://reader036.vdocuments.site/reader036/viewer/2022062423/5697c0301a28abf838cda93c/html5/thumbnails/51.jpg)
CHAPTER 1 51
注意 : 一般常以 average case 和 worst case 來討論 ( 真的要怎麼作 ?)
Estimate average case : 用隨機的測試資料 , 取結果的平均時間 Estimate worst case : 用隨機的測試資料 , 取結果的最大時間
There are actually two different methods for timing events in C. Figure 1.10 shows the major differences between these two methods. Method 1 uses clock to time events. This function gives the amount of processor tim
e that has elapsed since the program began running. Method 2 uses time to time events. This function returns the time, measured in seco
nds, as the built-in type time_t. The exact syntax of the timing functions varies from computer to computer and also
depends on the operating system and compiler in use.Method 1 Method 2
Start timing start=clock(); start=time(NULL);
Stop timing stop=clock(); stop=time(NULL);
Type returned clock_t time_t
Result in seconds
duration=((double)(stop-start)/CLK_TCK;
duration=(double)difftime(stop, start);
Figure 1.10
Performance Measurement (Performance Measurement (machine machine dependent)dependent)
CLOCKS_PER_SEC