1 / 13

§5 Backtracking Algorithms

§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.

soo
Download Presentation

§5 Backtracking Algorithms

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. §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. 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. 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. The basic idea is that suppose we have a partial solution ( x1, ... , xi ) where each xkSk for 1  k i < n. First we add xi+1  Si+1 and check if ( x1, ... , xi, xi+1 ) satisfies the constrains. If the answer is “yes” we continue to add the next x, else we delete xi and backtrack to the previous partial solution ( x1, ... , xi1 ). pruning 1/13

  2. §5 Backtracking Algorithms 1 8 2 7 6 3 5 4 4 5 6 3 7 2 1 8 Q Q Q Q Q Q Q Q 1. Eight Queens 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. Qi ::=queen in the i-th row xi ::=the column index in which Qi is 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!. Solution = ( x1, x2, ... , x8 ) = ( 4, 6, 8, 2, 7, 1, 3, 5 ) This implies 88 candidates in the solution space. For the problem with n queens, there are n! candidates in the solution space. Constrains:  Si= { 1,2,3,4,5,6,7,8 } for 1  i  8  xi xj if i  j  ( xixj ) / (i  j )   1 2/13

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

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

  5. §5 Backtracking Algorithms x5 = 8 x2 = 2 x4 = 7 x2 = 3 x3 = 6 x2 = 4 x3 = 4 x4 = 6 x3 = 5 2. The Turnpike Reconstruction Problem Given N points on the x-axis with coordinates x1 < x2 < …< xN. Assume that x1 = 0. There are N ( N – 1 ) / 2 distances between every pair of points. Home work: p.420 10.41 Homometric point sets 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: x1 = 0 and x6 = 10 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

  6. 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

  7. 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

  8. Use a table instead of recursion T(N) T(N – 1) + T(N – 2) T(N) F(N) §3 Dynamic Programming 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 ); } 8/13

  9. §3 Dynamic Programming F6 F5 F4 F4 F3 F3 F3 F1 F1 F2 F2 F2 F2 F2 F1 F1 F1 F1 F1 F1 F0 F0 F0 F0 F0 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

  10. §3 Dynamic Programming 2. Ordering Matrix Multiplications 〖Example〗Suppose we are to multiply 4 matrices M1 [ 1020 ]  M2 [ 2050 ]  M3 [ 501 ]  M4 [ 1100 ] . If we multiply in the order M1 [ 1020 ]  ( M2 [ 2050 ]  ( M3 [ 501 ]  M4 [ 1100 ] ) ) Then the computing time is 50  1  100 + 20  50  100 + 10  20  100 = 125,000 If we multiply in the order ( M1 [ 1020 ]  ( M2 [ 2050 ]  M3 [ 501 ] ) )  M4 [ 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

  11. §3 Dynamic Programming bn bi bni = n b O ( ) 4 /* Catalan number */ n n n Let bn = number of different ways to computeM1 M2    Mn. Then we have b2 = 1, b3 = 2, b4 = 5,    LetMij = Mi    Mj . ThenM1n = M1    Mn = M1i  Mi+1 n There are only O( N2) values of Mij. If j – i = k , then the only values Mxy required to compute Mijsatisfy y – x < k. Suppose we are to multiply n matricesM1     MnwhereMi is anri1 rimatrix. Letmijbe the cost of the optimal way to computeMi    Mj. Then we have the recurrence equations: 11/13

  12. §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(N3) To record the ordering please refer to Figure 10.46 on p.388 12/13

  13. 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

More Related