1 / 53

CHAPTER 1 BASIC CONCEPT

CHAPTER 1 BASIC CONCEPT. Ellis Horowitz, Sartaj Sahni, and Susan Anderson-Freed “Fundamentals of Data Structures in C”, Computer Science Press, 1992. Data Structure. 1. What is data structure? Data structure 探討一群相關資料的 資料表示方 法 與 資料運作方法

cala
Download Presentation

CHAPTER 1 BASIC CONCEPT

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CHAPTER 1BASIC CONCEPT Ellis Horowitz, Sartaj Sahni, and Susan Anderson-Freed “Fundamentals of Data Structures in C”, Computer Science Press, 1992. Chapter 1: Basic Concept

  2. Data Structure 1. What is data structure? Data structure探討一群相關資料的資料表示方 法與資料運作方法 2. What is purpose of learning data structure? 使用最有效率的方式,對一群相關資料進行處理 3. How to Analyze and Design Data Structure? 1. 找出對該資料的各種運算 2. 考慮最適當的Data Structure,使得各種運算的效率最佳 3. 設計一個完整的Algorithm Chapter 1: Basic Concept

  3. 1.1 System Life Cycle • Large-Scale program contains many complex interacting parts • Solid foundation of the methodologies in • data abstraction • algorithm specification • performance analysis and measurement Chapter 1: Basic Concept

  4. 1.1 System Life Cycle (cont’d) 5 phases of system life cycle: • Requirements: What inputs (needs), outputs (results) • Analysis: bottom-up vs. top-down, divide and conquer • Design: data objects and operations • Refinement and Coding: choice the representation for data object and write algorithm • Verification • Program Proving • Testing • Debugging Chapter 1: Basic Concept

  5. 1.2 Algorithm Specification • DefinitionAn algorithm is a finite set of instructions that accomplishes a particular task. (以有限的程序步驟完成所指定的工作即所謂的演算法) • Criteria must be met • Input: zero or 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 Chapter 1: Basic Concept

  6. 1.2 Algorithm Specification (cont’d) • Difference between an algorithm and a program : the program does not have to satisfy the fourth condition (Finiteness). • Describing an algorithm: natural language such as English will do. However, natural language is wordy to make a statement definite. That is where the Code of a program language fit in. • Flowchart: work well only for algorithm small and simple. Chapter 1: Basic Concept

  7. Example:Translating a Problem into an Algorithm • Problem • Devise a program that sorts a set of n integers, where n>= 1, from smallest to largest. • Solution I: looks good, but it is not an algorithm • From those integers that are currently unsorted, find the smallest and place it next in the sorted list. • Solution II: an algorithm, written in partially C and English • 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]; } Chapter 1: Basic Concept

  8. Example:Translating a Problem into an Algorithm (cont’d) #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); } • Solution III 上面swap意思即類似 void swap(int *x, int *y) { int temp= *x; *x= *y; *y= temp; } Chapter 1: Basic Concept

  9. Example:Translating a Problem into an Algorithm (cont’d) • Theorem 1.1 Function sort(list, n) correctly sorts a set of n>=1 integers. The result remains in list[0],…,list[n-1] such that list[0]<=list[1]<=list[2]<=…<=list[n-1]. • Proof: 1. When the outer for loop completes its iteration for i=q, we have list[q]<=list[r], where q<r<n. 2. On subsequence iterations, i>q and list[0] through list[q] are unchanged. Hence following the last iteration of the outer for loop (n-2), we have list[0]<=list[1]<=list[2]<=…<=list[n-1]. Chapter 1: Basic Concept

  10. 1.2.2 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. Chapter 1: Basic Concept

  11. 1.2.2 Recursive Algorithms • 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 algorithm 1. 找出遞迴關係 • 找出遞迴關係才能夠對問題進行切割 2. 找出終止條件 • 找出終止條件避免無窮遞迴下去 非常重要!! Chapter 1: Basic Concept

  12. 遞迴和迴圈的比較 • 遞迴的優點 : 簡潔易懂 缺點: 執行效率差因為執行時需要對遞 迴副程式進行呼叫,由於呼叫遞迴 副程式需要處理額外的工作。 • 迴圈的優點 : 執行效率佳 缺點:有的問題不易用迴圈來表示,即使寫得出 來也低階難懂。如河內塔問題。 哪些工作? Trace一個 Chapter 1: Basic Concept

  13. Sequential Search 第7次找到 Binary Search 第3次找到 在已排序的資料中找值18 Chapter 1: Basic Concept

  14. 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; } Chapter 1: Basic Concept

  15. Recursive Implementation of Binary Search int binsearch(int list[], int searchnum, int left, int right) {// search list[0]<= list[1]<=...<=list[n-1] for searchnum int 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; } Chapter 1: Basic Concept

  16. 河內塔問題 • 有三根木樁,在其中一根木樁上放上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); Chapter 1: Basic Concept

  17. Chapter 1: Basic Concept

  18. 河內塔程式碼 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); } } Chapter 1: Basic Concept

  19. 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. Chapter 1: Basic Concept

  20. 執行 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. Chapter 1: Basic Concept

  21. 1.3 Data Abstraction • 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 (equality/inequality), assigns, functions Chapter 1: Basic Concept

  22. 1.3 Data Abstraction (cont’d)Data encapsulation and Data abstraction • Data encapsulation or Information hiding是把資料物件的內部程式碼與變數內容隱藏不被外部的使用者知道 目的 : • 讓往後可能的修改能夠局限在此程式單元之中 • 讓程式單元不需隨著ADT內部的表示方式的改變而修改外部的使用方式 • 可提高程式的可重用度,可讀性, 方便除錯… • Data abstraction是將一個資料物件的specification和 implementation分離 目的:只描述主要特徵而隱藏大部分的次要特徵,可以將複雜的物件加以簡化 Chapter 1: Basic Concept

  23. 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 Chapter 1: Basic Concept

  24. Abstract data type model Chapter 1: Basic Concept

  25. Classifying the Functions of a ADT • 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 Chapter 1: Basic Concept

  26. *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 computerfunctions: for all x, y  Nat_Number; TRUE, FALSE  Boolean and where +, -, <, and == are the usual integer operations.Nat_No Zero ( ) ::= 0Boolean Is_Zero(x) ::= if (x) returnFALSEelse returnTRUENat_No Add(x, y) ::= if ((x+y) <= INT_MAX) return x+y else returnINT_MAXBoolean Equal(x,y) ::= if (x== y) returnTRUEelse returnFALSENat_No Successor(x) ::= if (x == INT_MAX) return xelse return x+1Nat_No Subtract(x,y) ::= if (x<y) return 0else return x-yend Natural_Number Creator Observer Transformer Chapter 1: Basic Concept

  27. Play with ADT • Add(Zero(),y) ::= return y • Add(Successor(x),y) ::= return Successor(Add(x,y)) • Equal(Zero(),Zero()) ::= return TRUE • Equal(Successor(x),Zero()) ::= return FALSE • Equal(Successor(x), Successor(y)) ::= return Equal(x, y) Chapter 1: Basic Concept

  28. Play with ADT (cont’d) • 0Zero() • 1Successor(Zero()) • 2Successor(Successor(Zero())) • 1 + 2 = ? • … • 1 + 2 == 3 ? Chapter 1: Basic Concept

  29. 1.4 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 workcorrectly? • 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? Chapter 1: Basic Concept

  30. Performance Analysis(Cont.) Practice Practice Practice • Evaluate a program Meet 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 Think Think Think Chapter 1: Basic Concept

  31. S(P)= c+ Sp(I) P: a program I: instance (input, output) • The space needed is the sum of • Fixed space and Variable space • Fixed space: c • Includes the instructions, variables, and constants • 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) Chapter 1: Basic Concept

  32. *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 the first element of the array & pass by value Chapter 1: Basic Concept

  33. *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為例) Ssum(I)=Ssum(n)=6n * Chapter 1: Basic Concept

  34. Time Complexity • Total time • T(P)= compile time + run (or execution) time • May run it many times without recompilation. Run time • 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 Chapter 1: Basic Concept

  35. 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 Chapter 1: Basic Concept

  36. *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; } Iterative summing of a list of numbers 2n + 3 steps Chapter 1: Basic Concept

  37. *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 Chapter 1: Basic Concept

  38. *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];} Recursive summing of a list of numbers 2n+2 steps Chapter 1: Basic Concept

  39. *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 Chapter 1: Basic Concept

  40. *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 Chapter 1: Basic Concept

  41. *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 Chapter 1: Basic Concept

  42. Tabular Method *Figure 1.2: Step count table for Program 1.10 (p.26) Iterative function to sum a list of numbers steps/execution Chapter 1: Basic Concept

  43. *Figure 1.3: Step count table for recursive summing function (p.27) Recursive Function to sum of a list of numbers Chapter 1: Basic Concept

  44. *Figure 1.4: Step count table for matrix addition (p.27) Matrix Addition Chapter 1: Basic Concept

  45. 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 Chapter 1: Basic Concept

  46. Asymptotic Notation O • Definition • f(n)= O(g(n)) iff there exist positive constants c and n0 such 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 (各舉一例) Chapter 1: Basic Concept

  47. Asymptotic Notation  • Definition • f(n)= (g(n)) iff there exist positive constants c and n0such 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) Chapter 1: Basic Concept

  48. Asymptotic Notation  • Definition • f(n)= (g(n)) iff there exist positive constants c1, c2, and n0 such 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) Chapter 1: Basic Concept

  49. 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) Chapter 1: Basic Concept

  50. 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) Chapter 1: Basic Concept

More Related