if (s.solution())

advertisement
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
1
The puzzle
SIGCSE 2003
2
SIGCSE 2003
3
Brute force problem solving
Generate
candidates
Filter
Solutions
Trash
SIGCSE 2003
4
Requirements
• Candidate set must be finite.
• Must be an “Oh yeah!” problem.
SIGCSE 2003
5
Example
Combination lock
60*60*60 = 216,000
candidates
SIGCSE 2003
6
Example
SIGCSE 2003
7
Oh no!
SIGCSE 2003
8
Oh yeah!
SIGCSE 2003
9
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
10
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
11
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
12
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
13
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
14
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
15
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
16
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
17
Faster!
• Reduce size of candidate set.
• Example: 8-queens, one per row, has only
16,777,216 candidates.
SIGCSE 2003
18
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
19
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
20
Nifty assignments
1. 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
21
Nifty assignments
Solution is a sequence of known length (n) where
each element is one of the colors.
1
2
4
3
SIGCSE 2003
22
Nifty assignments
2. Running a maze: How can you get from start
to finish legally in a maze?
20 x 20 grid
SIGCSE 2003
23
Nifty assignments
Solution is a sequence of unknown length, but
bounded by 400, where each element is
S, L, or R.
SIGCSE 2003
24
Nifty assignments
3. Making change.
How many ways are there to make $1.00 with
coins. Don’t forget Sacagawea.
SIGCSE 2003
25
Nifty assignments
3. Making change.
Have the coin set be variable.
Exclude the penny.
SIGCSE 2003
26
Nifty assignments
4. Unscrambling a word
“ptos” == “stop”, “post”, “pots”, ”spot”
SIGCSE 2003
27
Nifty assignments
4. Unscrambling a word
Requires a dictionary
Data structures and efficient search
Permutations
SIGCSE 2003
28
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
29
The puzzle
SIGCSE 2003
30
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
31
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
32
SIGCSE 2003
33
Download