sigcse 20031 nifty assignments: brute force and backtracking steve weiss department of computer...

33
SIGCSE 2003 1 Nifty assignments: Brute force and backtracking Steve Weiss Department of Computer Science University of North Carolina at Chapel Hill [email protected]

Upload: rosa-ward

Post on 16-Dec-2015

215 views

Category:

Documents


0 download

TRANSCRIPT

SIGCSE 2003 1

Nifty assignments:Brute force and backtracking

Steve Weiss

Department of Computer Science

University of North Carolina at Chapel Hill

[email protected]

SIGCSE 2003 2

The puzzle

SIGCSE 2003 3

SIGCSE 2003 4

Brute force problem solving

Generate candidates

FilterSolutions

Trash

SIGCSE 2003 5

Requirements

• Candidate set must be finite.

• Must be an “Oh yeah!” problem.

SIGCSE 2003 6

Example

Combination lock

60*60*60 = 216,000

candidates

SIGCSE 2003 7

Example

SIGCSE 2003 8

Oh no!

SIGCSE 2003 9

Oh yeah!

SIGCSE 2003 10

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 11

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 12

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 13

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 14

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 15

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 16

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 17

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 18

Faster!

• Reduce size of candidate set.

• Example: 8-queens, one per row, has only 16,777,216 candidates.

SIGCSE 2003 19

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 20

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 21

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 22

Nifty assignments

Solution is a sequence of known length (n) where each element is one of the colors.

1

43

2

SIGCSE 2003 23

Nifty assignments

2. Running a maze: How can you get from start to finish legally in a maze?

20 x 20 grid

SIGCSE 2003 24

Nifty assignments

Solution is a sequence of unknown length, but bounded by 400, where each element is S, L, or R.

SIGCSE 2003 25

Nifty assignments

3. Making change.

How many ways are there to make $1.00 with coins. Don’t forget Sacagawea.

SIGCSE 2003 26

Nifty assignments

3. Making change.

Have the coin set be variable.

Exclude the penny.

SIGCSE 2003 27

Nifty assignments

4. Unscrambling a word

“ptos” == “stop”, “post”, “pots”, ”spot”

SIGCSE 2003 28

Nifty assignments

4. Unscrambling a word

Requires a dictionary

Data structures and efficient search

Permutations

SIGCSE 2003 29

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 30

The puzzle

SIGCSE 2003 31

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 32

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 33