Nifty assignments: Brute force and backtracking

181 Views

Download Presentation
## Nifty assignments: Brute force and backtracking

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -

**Nifty assignments:Brute force and backtracking**Steve Weiss Department of Computer Science University of North Carolina at Chapel Hill weiss@cs.unc.edu SIGCSE 2003**The puzzle**SIGCSE 2003**Brute force problem solving**Generate candidates Filter Solutions Trash SIGCSE 2003**Requirements**• Candidate set must be finite. • Must be an “Oh yeah!” problem. SIGCSE 2003**Example**Combination lock 60*60*60 = 216,000 candidates SIGCSE 2003**Example**SIGCSE 2003**Oh no!**SIGCSE 2003**Oh yeah!**SIGCSE 2003**Additional restrictions**• Solution is a sequence s1, s2,…,sn • Solution length, n, is known (or at least bounded) in advance. • Each si is drawn from a finite pool T. SIGCSE 2003**Sequence class**• extend(x) Add x to the right end of the sequence. • retract() Remove the rightmost element. • size() How long is the sequence? • … SIGCSE 2003**Generating the candidates**Classic backtrack algorithm: At decision point, do something new (extend something that hasn’t been added to this sequence at this place before.) Fail: Backtrack: Undo most recent decision (retract). Fail: done SIGCSE 2003**Recursive backtrack algorithm(pseudo Java)**backtrack(Sequence s) { for each si in T { s.extend(si); if (s.size() == MAX) // Complete sequence display(s); else backtrack(s); s.retract(); } // End of for } // End of backtrack SIGCSE 2003**Problem solver**backtrack(Sequence s) { for each si in T { s.extend(si); if (s.size() == MAX) // Complete sequence if (s.solution()) display(s); else backtrack(s); s.retract(); } // End of for } // End of backtrack SIGCSE 2003**Problems**• Too slow, even on very fast machines. • Case study: 8-queens • Example: 8-queens has more than 281,474,976,711,000 candidates. SIGCSE 2003**8-queens**• How can you place 8 queens on a chessboard so that no queen threatens any of the others. • Queens can move left, right, up, down, and along both diagonals. SIGCSE 2003**Problems**• Too slow, even on very fast machines. • Case study: 8-queens • Example: 8-queens has more than 281,474,976,711,000 candidates. SIGCSE 2003**Faster!**• Reduce size of candidate set. • Example: 8-queens, one per row, has only 16,777,216 candidates. SIGCSE 2003**Faster still!**• Prune: reject nonviable candidates early, not just when sequence is complete. • Example: 8-queens with pruning looks at about 16,000 partial and complete candidates. SIGCSE 2003**Backtrack with pruning**backtrack(Sequence s) { for each si in T if (s.okToAdd(si)) // Pruning { s.extend(si); if (s.size() == MAX) // Complete solution display(s); else backtrack(s); s.retract(); } // End of if } // End of backtrack SIGCSE 2003**Nifty assignments**• Map coloring: Given a map with n regions, and a palate of c colors, how many ways can you color the map so that no regions that share a border are the same color? SIGCSE 2003**Nifty assignments**• Solution is a sequence of known length (n) where each element is one of the colors. 1 2 4 3 SIGCSE 2003**Nifty assignments**• 2. Running a maze: How can you get from start to finish legally in a maze? 20 x 20 grid SIGCSE 2003**Nifty assignments**• Solution is a sequence of unknown length, but bounded by 400, where each element is S, L, or R. SIGCSE 2003**Nifty assignments**• 3. Making change. • How many ways are there to make $1.00 with coins. Don’t forget Sacagawea. SIGCSE 2003**Nifty assignments**• 3. Making change. • Have the coin set be variable. • Exclude the penny. SIGCSE 2003**Nifty assignments**4. Unscrambling a word “ptos” == “stop”, “post”, “pots”, ”spot” SIGCSE 2003**Nifty assignments**4. Unscrambling a word Requires a dictionary Data structures and efficient search Permutations SIGCSE 2003**Nifty assignments**• 5. Solving the 9 square problem. • Solution is sequence of length 9 where each element is a different puzzle piece and where the touching edges sum to zero. SIGCSE 2003**The puzzle**SIGCSE 2003**Nifty assignments**Challenges: Data structures to store the pieces and the 3 x 3 board. Canonical representation so that solutions don’t appear four times. Pruning nonviable sequences: puzzle piece used more than once. edge rule violation not canonical SIGCSE 2003**Nifty assignments**Challenges: Algorithm analysis: instrumenting the program to keep track of running time and number of calls to the filter and to the backtrack method. SIGCSE 2003