330 likes | 514 Views
Nifty assignments: Brute force and backtracking. Steve Weiss Department of Computer Science University of North Carolina at Chapel Hill weiss@cs.unc.edu. The puzzle. Brute force problem solving. Generate candidates. Filter. Solutions. Trash. Requirements. Candidate set must be finite.
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