170 likes | 406 Views
Chapter 2 Algorithm Design. Result. Human Problems. Input Data Structures. Processing. Output Data Structures. Computer Algorithms. Chapter 2 Algorithm Design. For a problem? What is an Optimal Solution?. 用最少的 (CPU) 時間 ( 通常是指這點 ) 用最少的記憶體.
E N D
Chapter 2 Algorithm Design Result Human Problems Input Data Structures Processing Output Data Structures Computer Algorithms
Chapter 2 Algorithm Design For a problem? What is an Optimal Solution? • 用最少的(CPU)時間 (通常是指這點) • 用最少的記憶體 Example: Given 4 numbers, sort it to nonincreasing order. Method 1: Sequential comparison 1. Find the largest (3 comparisons) 2. Find the second largest (2 comparisons) 3. Find the third largest (1 comparisons) 4. Find the fourth largest A total of 6 comparisons
Chapter 2 Algorithm Design For a problem? What is an Optimal Solution? • 用最少的(CPU)時間 (通常是指這點) • 用最少的記憶體 Example: Given 4 numbers, sort it to nonincreasing order. Method 2: Somewhat clever method a2 a3 a1 a2 a3 a4 (4 comparisons) a3 a2 a4 (5 comparisons) a2 a3 a1 a3 a4 a2 a3 or a1
Chapter 2 Algorithm Design 2.1 Greedy Algorithms A greedy algorithm takes an action that seems the best at the given time, without consideration of future actions. Example: Coin changing problem Make change for any amount from $0.01 to $0.99 using the fewest number of coins. The available coins are $0.5, $0.25, $0.1, $0.05, and $0.01. $0.94=$0.5+$0.25+$0.1+$0.05+4*$0.01 A total of 8 coins Greedy algorithm works for U.S. coins. But not necessarily so for others. See Exercise 1 in Page 27.
Chapter 2 Algorithm Design 2.1 Greedy Algorithms Hill climbing concept Local optimum Global optimum
Chapter 2 Algorithm Design 2.2 Divide-and-Conquer Algorithms Example: Finding the minimum number in a list of numbers minimum(a,lower,upper) { if (upper-lower) == 1 return min(a[upper],a[lower]); else return min(minimum(a,lower,(lower+upper)/2), minimum(a,(lower+upper)/2+1,upper)); } Merge sort Quick sort
Chapter 2 Algorithm Design 2.2 Divide-and-Conquer Algorithms The closest pair problem d d d For each point near the border, there can be at most six candidates for the closest neighbor across the border. Why?
Chapter 2 Algorithm Design 2.3 Dynamic Programming Algorithms Often a problem can be solved by divide-and-conquer, but it may turn out to be an inefficient algorithm because much work is duplicated when solving the subproblems. (or because the conquer (merge) step is too complicated)
Chapter 2 Algorithm Design 2.3 Dynamic Programming Algorithms The Fibonacci numbers Fibonacci(n) { if (n<2) return 1; else return Fibonacci(n-1)+Fibonacci(n-2); } Many repetitive calculations F(1) F(2) F(3) F(5) F(2) F(3) F(1) F(2) F(4)
Chapter 2 Algorithm Design 2.3 Dynamic Programming Algorithms The Fibonacci numbers A simpler implementation: Fibonacci(n) { int data[n]; data[0]=1; data[1]=1; for (j=2; j<n; j++) data[j]=data[j-2]+data[j-1]; return data[n-1]; } Example of one-dimensional dynamic programming
Chapter 2 Algorithm Design 2.3 Dynamic Programming Algorithms The number of combinations
Chapter 2 Algorithm Design 2.3 Dynamic Programming Algorithms The number of combinations The Pascal’s triangle r 0 1 2 3 4 ... n 0 1 2 3 4 ... 1 1 1 1 1 ... 1 3 6 ... 1 4 ... 1 2 3 4 ... 1
Chapter 2 Algorithm Design 2.4 Backtracking Algorithms The tic-tac-toe game How can a computer play the game? x x Remember Deep Blue?
Chapter 2 Algorithm Design 2.4 Backtracking Algorithms (1,1)C The tic-tac-toe game 0 1 2 x (0,0)H (0,1)H (0,2)H (1,0)H... 0 1 (0,0)C, (0,1)C, (1,0)C... x (0,1)H, (1,0)H, …, (2,2)H 2 x (0,1)C, (1,0)C, (1,2)C, (2,0)C... : Computer : Human
Chapter 2 Algorithm Design 2.4 Backtracking Algorithms 3 missionaries and 2 cannibals want to cross the river Condition: 1. A boat can take one or two (must include a missionary) 2. At any time, on either bank, the number of missionaries must not be less than the number of cannibals.