Presentation is loading. Please wait.

Presentation is loading. Please wait.

§5 Backtracking Algorithms A sure-fire way to find the answer to a problem is to make a list of all candidate answers, examine each, and following the.

Similar presentations


Presentation on theme: "§5 Backtracking Algorithms A sure-fire way to find the answer to a problem is to make a list of all candidate answers, examine each, and following the."— Presentation transcript:

1

2 §5 Backtracking Algorithms A sure-fire way to find the answer to a problem is to make a list of all candidate answers, examine each, and following the examination of all or some of the candidates, declare the identified answer. Suuuure — if the list is finite and it is possible to identify the answer following the examinations. AND, if there are not too many candidates. Backtracking enables us to eliminate the explicit examination of a large subset of the candidates while still guaranteeing that the answer will be found if the algorithm is run to termination. The basic idea is that suppose we have a partial solution ( x 1,..., x i ) where each x k  S k for 1  k  i < n. First we add x i+1  S i+1 and check if ( x 1,..., x i, x i+1 ) satisfies the constrains. If the answer is “yes” we continue to add the next x, else we delete x i and backtrack to the previous partial solution ( x 1,..., x i  1 ). pruning 1/13

3 §5 Backtracking Algorithms Find a placement of 8 queens on an 8  8 chessboard such that no two queens attack. Two queens are said to attack iff they are in the same row, column, diagonal, or antidiagonal of the chessboard. 12345678 8 7 6 5 4 3 2 1 Q Q Q Q Q Q Q Q Q i ::= queen in the i-th row x i ::= the column index in which Q i is Solution = ( x 1, x 2,..., x 8 ) = ( 4, 6, 8, 2, 7, 1, 3, 5 ) Constrains:  S i = { 1,2,3,4,5,6,7,8 } for 1  i  8 This implies 8 8 candidates in the solution space.  x i  x j if i  j  ( x i  x j ) / (i  j )   1 This implies that the solution must be a permutation of 1, 2,..., 8. Thus the number of candidates in the solution space is reduced to 8!. For the problem with n queens, there are n! candidates in the solution space. 1. Eight Queens 2/13

4 §5 Backtracking Algorithms Method: Take the problem of 4 queens as an example Step 1: Construct a game tree 1 5 4 3 7 6 10 9 8 12 11 15 14 13 17 16 2 21 20 19 23 22 26 25 24 28 27 31 30 29 33 32 18 37 36 35 39 38 42 41 40 44 43 47 46 45 49 48 34 53 52 51 55 54 58 57 56 60 59 63 62 61 65 64 50 x1 = 1234 x2 = 234134124132 x3 = 342423341413241412231312 x4 = 434232434131424121323121 4 ! leaves Each path from the root to a leaf defines an element of the solution space. 3/13

5 §5 Backtracking Algorithms 1 5 4 3 7 6 10 9 8 12 11 15 14 13 17 16 2 21 20 19 23 22 26 25 24 28 27 31 30 29 33 32 18 37 36 35 39 38 42 41 40 44 43 47 46 45 49 48 34 53 52 51 55 54 58 57 56 60 59 63 62 61 65 64 50 x1 = 1234 x2 = 234134124132 x3 = 342423341413241412231312 x4 = 434232434131424121323121 Step 2: Perform a depth-first search ( post-order traversal ) to examine the paths Q QQ QQ Q Q Q Q Q QQQ Q Q ( 2, 4, 1, 3 ) Note: No tree is actually constructed. The game tree is just an abstract concept. 4/13

6 §5 Backtracking Algorithms 2. The Turnpike Reconstruction Problem Given N points on the x-axis with coordinates x 1 < x 2 < …< x N. Assume that x 1 = 0. There are N ( N – 1 ) / 2 distances between every pair of points. Given N ( N – 1 ) / 2 distances. Reconstruct a point set from the distances. 〖 Example 〗 Given D = { 1, 2, 2, 2, 3, 3, 3, 4, 5, 5, 5, 6, 7, 8, 10 } Step 1: N ( N – 1 ) / 2 = 15 implies N = ? 6 Step 2: x 1 = 0 and x 6 = 10 x 3 = 6x 2 = 4x 3 = 4x 4 = 6 x 3 = 5 x 4 = 7x 2 = 3 x 5 = 8x 2 = 2 Step 3: find the next largest distance and check ( 0, 3, 5, 6, 8, 10 ) Please read Figure 10.64 and 10.65 for details. 5/13 Home work: p.420 10.41 Homometric point sets

7 Research Project 14 Review of Programming Contest Rules (25) Given the ACM-ICPC's rule of scoring, your task is to write a program to find yourself the order of solving the problems which gives you the best chance of winning the contest. Detailed requirements can be downloaded from http://acm.zju.edu.cn/dsaa/ 6/13

8 Research Project 15 Good-Bye Party (25) In every summer there are students graduating from school. A lot of graduating students would like to host their parties to say good-bye to their classmates and friends. This kind of activity is called "bg" on our BBS. Attending different parties will give you different feelings. You may assign each party a degree of happiness which is a non-negative integer that shows how you feel about attending to that party. Now you are given a list of parties containing the length of each party and the time on which the host will be leaving school. It would be nice to schedule the parties so that you can obtain maximum of happiness. Since there could be as many as 30 parties on the list, you'll need the computer to help you. Detailed requirements can be downloaded from http://acm.zju.edu.cn/dsaa/ 7/13

9 §3 Dynamic Programming Use a table instead of recursion 1. Fibonacci Numbers: F(N) = F(N – 1) + F(N – 2) int Fib( int N ) { if ( N <= 1 ) return 1; else return Fib( N - 1 ) + Fib( N - 2 ); } T(N)  T(N – 1) + T(N – 2) T(N)  F(N) 8/13

10 §3 Dynamic ProgrammingF6 F2 F1F0 F3 F1 F2 F1F0 F2 F1F0 F3 F1F2 F1F0 F3 F1 F2 F1F0 F4 F5 Trouble-maker : The growth of redundant calculations is explosive. Solution : Record the two most recently computed values to avoid recursive calls. int Fibonacci ( int N ) { int i, Last, NextToLast, Answer; if ( N <= 1 ) return 1; Last = NextToLast = 1; /* F(0) = F(1) = 1 */ for ( i = 2; i <= N; i++ ) { Answer = Last + NextToLast; /* F(i) = F(i-1) + F(i-2) */ NextToLast = Last; Last = Answer; /* update F(i-1) and F(i-2) */ } /* end-for */ return Answer; } T(N) = O(N) 9/13

11 §3 Dynamic Programming 2. Ordering Matrix Multiplications 〖 Example 〗 Suppose we are to multiply 4 matrices M 1 [ 10  20 ]  M 2 [ 20  50 ]  M 3 [ 50  1 ]  M 4 [ 1  100 ]. If we multiply in the order M 1 [ 10  20 ]  ( M 2 [ 20  50 ]  ( M 3 [ 50  1 ]  M 4 [ 1  100 ] ) ) Then the computing time is 50  1  100 + 20  50  100 + 10  20  100 = 125,000 If we multiply in the order ( M 1 [ 10  20 ]  ( M 2 [ 20  50 ]  M 3 [ 50  1 ] ) )  M 4 [ 1  100 ] Then the computing time is 20  50  1 + 10  20  1 + 10  1  100 = 2,200 Problem: In which order can we compute the product of n matrices with minimal computing time? 10/13

12 §3 Dynamic Programming Let b n = number of different ways to compute M 1  M 2     M n. Then we have b 2 = 1, b 3 = 2, b 4 = 5,    Let M ij = M i     M j. Then M 1n = M 1     M n = M 1i  M i+1 n bnbn bibi bnibni )( 4 nn n n Ob  /* Catalan number */ Suppose we are to multiply n matrices M 1     M n where M i is an r i  1  r i matrix. Let m ij be the cost of the optimal way to compute M i     M j. Then we have the recurrence equations: There are only O( N 2 ) values of M ij. If j – i = k, then the only values M xy required to compute M ij satisfy y – x < k. 11/13

13 §3 Dynamic Programming /* r contains number of columns for each of the N matrices */ /* r[ 0 ] is the number of rows in matrix 1 */ /* Minimum number of multiplications is left in M[ 1 ][ N ] */ void OptMatrix( const long r[ ], int N, TwoDimArray M ) { int i, j, k, L; long ThisM; for( i = 1; i <= N; i++ ) M[ i ][ i ] = 0; for( k = 1; k < N; k++ ) /* k = j - i */ for( i = 1; i <= N - k; i++ ) { /* For each position */ j = i + k; M[ i ][ j ] = Infinity; for( L = i; L < j; L++ ) { ThisM = M[ i ][ L ] + M[ L + 1 ][ j ] + r[ i - 1 ] * r[ L ] * r[ j ]; if ( ThisM < M[ i ][ j ] ) /* Update min */ M[ i ][ j ] = ThisM; } /* end for-L */ } /* end for-Left */ } T(N) = O(N 3 ) To record the ordering please refer to Figure 10.46 on p.388 12/13

14 Research Project 16 Diff (25) In computing, diff is a file comparison utility that outputs the differences between two files. It is typically used to show the changes between a file and a former version of the same file. Diff displays the changes made per line for text files. Now you are supposed to simulate the diff operation. Detailed requirements can be downloaded from http://acm.zju.edu.cn/dsaa/ 13/13


Download ppt "§5 Backtracking Algorithms A sure-fire way to find the answer to a problem is to make a list of all candidate answers, examine each, and following the."

Similar presentations


Ads by Google