5.5 back track

58
BackTracking Algorithms Briana B. Morrison With thanks to Dr. Hung

Upload: krishver2

Post on 15-Aug-2015

36 views

Category:

Education


1 download

TRANSCRIPT

Page 1: 5.5 back track

BackTracking Algorithms

Briana B. Morrison

With thanks to Dr. Hung

Page 2: 5.5 back track

2

Topics

What is Backtracking N-Queens Problem Sum of Subsets Graph Coloring Hamiltonian Circuits Other Problems

Page 3: 5.5 back track

3

Algorithm Design

Human Problems Result

Input Data Structures Processing

Output Data Structures

ComputerAlgorithms

Page 4: 5.5 back track

4

Algorithm Design …

For a problem? What is an Optimal Solution?

• Minimum CPU time• Minimum memory

Example: Given 4 numbers, sort it to nonincreasing order.Method 1: Sequential comparison1. Find the largest (3 comparisons)2. Find the second largest (2 comparisons)3. Find the third largest (1 comparisons)4. Find the fourth largest

A total of 6 comparisons

Page 5: 5.5 back track

5

Algorithm Design …For a problem? What is an Optimal Solution?

• Minimum CPU time• Minimum memory

Example: Given 4 numbers, sort it to nonincreasing order.

Method 2: Somewhat clever method

a1 a2 a3 a4

a2 a4

a4

a2 a3

a3

a2 a3

a2

a1 a3

a3 or a1

(4 comparisons)

(5 comparisons)

Page 6: 5.5 back track

6

Backtracking Problems

Find your way through the well-known maze of hedges by Hampton Court Palace in England? Until you reached a dead end.

0-1 Knapsack problem – exponential time complexity.

N-Queens problem.

Page 7: 5.5 back track

7

Backtracking

Suppose you have to make a series of decisions, among various choices, where– You don’t have enough information to know what

to choose– Each decision leads to a new set of choices– Some sequence of choices (possibly more than

one) may be a solution to your problem Backtracking is a methodical way of trying out

various sequences of decisions, until you find one that “works”

Page 8: 5.5 back track

8

Introduction

Backtracking is used to solve problems in which a sequence of objects is chosen from a specified set so that the sequence satisfies some criterion.

Backtracking is a modified depth-first search of a tree.

Backtracking involves only a tree search. Backtracking is the procedure whereby, after

determining that a node can lead to nothing but dead nodes, we go back (“backtrack”) to the node’s parent and proceed with the search on the next child.

Page 9: 5.5 back track

9

Introduction …

We call a node nonpromising if when visiting the node we determine that it cannot possibly lead to a solution. Otherwise, we call it promising.

In summary, backtracking consists of– Doing a depth-first search of a state space tree,– Checking whether each node is promising, and, if it is

nonpromising, backtracking to the node’s parent. This is called pruning the state space tree, and the

subtree consisting of the visited nodes is called the pruned state space tree.

Page 10: 5.5 back track

10

Solving a maze

Given a maze, find a path from start to finish At each intersection, you have to decide between three or fewer

choices:– Go straight– Go left– Go right

You don’t have enough information to choose correctly Each choice leads to another set of choices One or more sequences of choices may (or may not) lead to a

solution Many types of maze problem can be solved with backtracking

Page 11: 5.5 back track

11

Coloring a map

You wish to color a map withnot more than four colors

– red, yellow, green, blue Adjacent countries must be in

different colors You don’t have enough information to choose colors Each choice leads to another set of choices One or more sequences of choices may (or may not)

lead to a solution Many coloring problems can be solved with

backtracking

Page 12: 5.5 back track

12

Solving a puzzle

In this puzzle, all holes but one are filled with white pegs

You can jump over one peg with another Jumped pegs are removed The object is to remove all but the last peg You don’t have enough information to jump correctly Each choice leads to another set of choices One or more sequences of choices may (or may not)

lead to a solution Many kinds of puzzle can be solved with backtracking

Page 13: 5.5 back track

13

Backtracking (animation)

start ?

?dead end

dead end

??

dead end

dead end

?

success!

dead end

Page 14: 5.5 back track

14

N-Queens Problem

Try to place N queens on an N * N board such that none of the queens can attack another queen.

Remember that queens can move horizontally, vertically, or diagonally any distance.

Let’s consider the 8 queen example…

Page 15: 5.5 back track

15

The 8-Queens Example

Page 16: 5.5 back track

16

0

1

2

3

4

5

6

7

0 1 2 3 4 5 6 7

Page 17: 5.5 back track

17

A t (4 ,4 ) at t ack fro m (0 ,0 ) A t (5 ,4 ) at t ack fro m (2 ,1 ) A t (6 ,4 ) at t ack fro m (4 ,2 ) A t (7 ,4 ) s u cces s

0

1

2

3

4

5

6

7

0 1 2 3 4 5 6 7

Page 18: 5.5 back track

18

Let’s look at it run

Page 19: 5.5 back track

19

Terminology I

There are three kinds of nodes:

A tree is composed of nodes

The (one) root node

Internal nodes

Leaf nodesBacktracking can be thought of as searching a tree for a particular “goal” leaf node

Page 20: 5.5 back track

20

Terminology II

Each non-leaf node in a tree is a parent of one or more other nodes (its children)

Each node in the tree, other than the root, has exactly one parent

parent

children

parent

children

Usually, however, we draw our trees downward, with the root at the top

Page 21: 5.5 back track

21

Real and virtual trees

There is a type of data structure called a tree– But we are not using it here

If we diagram the sequence of choices we make, the diagram looks like a tree– In fact, we did just this a couple of slides ago– Our backtracking algorithm “sweeps out a tree” in

“problem space”

Page 22: 5.5 back track

22

The backtracking algorithm

Backtracking is really quite simple--we “explore” each node, as follows:

To “explore” node N: 1. If N is a goal node, return “success” 2. If N is a leaf node, return “failure” 3. For each child C of N,

3.1. Explore C 3.1.1. If C was successful, return “success”

4. Return “failure”

Page 23: 5.5 back track

23

Sum-of-Subsets problem

Recall the thief and the 0-1 Knapsack problem. The goal is to maximize the total value of the stolen

items while not making the total weight exceed W. If we sort the weights in nondecreasing order before

doing the search, there is an obvious sign telling us that a node is nonpromising.

Page 24: 5.5 back track

24

Sum-of-Subsets problem …

Let total be the total weight of the remaining weights, a node at the ith level is nonpromising if

weight + total > W

Page 25: 5.5 back track

25

Example

Say that our weight values are 5, 3, 2, 4, 1 W is 8 We could have

– 5 + 3– 5 + 2 + 1– 4 + 3 + 1

We want to find a sequence of values that satisfies the criteria of adding up to W

Page 26: 5.5 back track

26

Tree Space

Visualize a tree in which the children of the root indicate whether or not value has been picked (left is picked, right is not picked)

Sort the values in non-decreasing order so the lightest value left is next on list

Weight is the sum of the weights that have been included at level i

Let weight be the sum of the weights that have been included up to a node at level i. Then, a node at the ith level is nonpromising if

weight + wi+1 > W

Page 27: 5.5 back track

27

Sum-of-Subsets problem …

Example: Show the pruned state space tree when backtracking is used with n = 4, W = 13, and w1 = 3, w2 = 4, w3 = 5, and w4 = 6. Identify those nonpromising nodes.

Page 28: 5.5 back track

28

Full example: Map coloring

The Four Color Theorem states that any map on a plane can be colored with no more than four colors, so that no two countries with a common border are the same color

For most maps, finding a legal coloring is easy For some maps, it can be fairly difficult to find a

legal coloring We will develop a complete Java program to

solve this problem

Page 29: 5.5 back track

29

Data structures

We need a data structure that is easy to work with, and supports:

– Setting a color for each country– For each country, finding all adjacent countries

We can do this with two arrays– An array of “colors”, where countryColor[i] is the color of

the ith country– A ragged array of adjacent countries, where map[i][j] is the

jth country adjacent to country i Example: map[5][3]==8 means the 3th country adjacent to

country 5 is country 8

Page 30: 5.5 back track

30

Creating the map 0 14

2 36

5int map[][];

void createMap() { map = new int[7][]; map[0] = new int[] { 1, 4, 2, 5 }; map[1] = new int[] { 0, 4, 6, 5 }; map[2] = new int[] { 0, 4, 3, 6, 5 }; map[3] = new int[] { 2, 4, 6 }; map[4] = new int[] { 0, 1, 6, 3, 2 }; map[5] = new int[] { 2, 6, 1, 0 }; map[6] = new int[] { 2, 3, 4, 1, 5 };}

Page 31: 5.5 back track

31

Setting the initial colors

static final int NONE = 0;static final int RED = 1;static final int YELLOW = 2;static final int GREEN = 3;static final int BLUE = 4;

int mapColors[] = { NONE, NONE, NONE, NONE, NONE, NONE, NONE };

Page 32: 5.5 back track

32

The main program

(The name of the enclosing class is ColoredMap)

public static void main(String args[]) {

ColoredMap m = new ColoredMap();

m.createMap();

boolean result = m.explore(0, RED);

System.out.println(result);

m.printMap();

}

Page 33: 5.5 back track

33

The backtracking method

boolean explore(int country, int color) { if (country >= map.length) return true; if (okToColor(country, color)) {

mapColors[country] = color; for (int i = RED; i <= BLUE; i++) {

if (explore(country + 1, i)) return true; }

} return false;

}

Page 34: 5.5 back track

34

Checking if a color can be used

boolean okToColor(int country, int color) { for (int i = 0; i < map[country].length; i++) {

int ithAdjCountry = map[country][i]; if (mapColors[ithAdjCountry] == color) {

return false;

} } return true;

}

Page 35: 5.5 back track

35

Printing the results

void printMap() {

for (int i = 0; i < mapColors.length; i++) { System.out.print("map[" + i + "] is "); switch (mapColors[i]) { case NONE: System.out.println("none"); break; case RED: System.out.println("red"); break; case YELLOW: System.out.println("yellow"); break; case GREEN: System.out.println("green"); break; case BLUE: System.out.println("blue"); break; } }}

Page 36: 5.5 back track

36

Recap

We went through all the countries recursively, starting with country zero

At each country we had to decide a color– It had to be different from all adjacent countries– If we could not find a legal color, we reported failure– If we could find a color, we used it and recurred with

the next country– If we ran out of countries (colored them all), we

reported success When we returned from the topmost call, we were done

Page 37: 5.5 back track

37

Hamiltonian Circuits Problem

Hamiltonian circuit (tour) of a graph is a path that starts at a given vertex, visits each vertex in the graph exactly once, and ends at the starting vertex.

Page 38: 5.5 back track

38

State Space Tree

Put the starting vertex at level 0 in the tree At level 1, create a child node for the root

node for each remaining vertex that is adjacent to the first vertex.

At each node in level 2, create a child node for each of the adjacent vertices that are not in the path from the root to this vertex, and so on.

Page 39: 5.5 back track

39

Example

18 C F

3 15 4 10

12 5 19 A B D H

6 5 4 22 E G

Page 40: 5.5 back track

40

Backtracking Algorithms

The tic-tac-toe game

x x

How can a computer playthe game?

Remember Deep Blue?

Page 41: 5.5 back track

41

Backtracking Algorithms

The tic-tac-toe game

x

x

0 1 2

0

1

2

(1,1)C

(0,0)H (0,1)H (0,2)H (1,0)H...

(0,0)C, (0,1)C, (1,0)C...

(0,1)H, (1,0)H, …, (2,2)H

(0,1)C, (1,0)C, (1,2)C, (2,0)C...: Computer x: Human

Page 42: 5.5 back track

42

Backtracking Algorithms

3 missionaries and 2 cannibals want to cross the river Condition:1. A boat can take one or two (must include a missionary)2. At any time, on either bank, the number of missionaries must not be less than the number of cannibals.

Page 43: 5.5 back track

43

Backtracking Search

Essentially a simplified depth-first algorithm using recursion

Page 44: 5.5 back track

44

Backtracking Search(3 variables)

Assignment = {}

Page 45: 5.5 back track

45

Backtracking Search(3 variables)

Assignment = {(X1,v11)}

X1

v11

Page 46: 5.5 back track

46

Backtracking Search(3 variables)

Assignment = {(X1,v11), (X3,v31)}

X1

v11

v31

X3

Page 47: 5.5 back track

47

Backtracking Search(3 variables)

Assignment = {(X1,v11), (X3,v31)}

X1

v11

v31

X3

X2 Assume that no value of X2

leads to a valid assignment

Then, the search algorithm backtracks to the previous variable and tries another value

Page 48: 5.5 back track

48

Backtracking Search(3 variables)

Assignment = {(X1,v11), (X3,v32)}

X1

v11

X3

v32v31

X2

Page 49: 5.5 back track

49

Backtracking Search(3 variables)

Assignment = {(X1,v11), (X3,v32)}

X1

v11

X3

v32

X2

Assume again that no value of X2 leads to a valid assignment

The search algorithm backtracks to the previous variable (X3) and tries another value. But assume that X3 has only two possible values. The algorithm backtracks to X1

v31

X2

Page 50: 5.5 back track

50

Backtracking Search(3 variables)

Assignment = {(X1,v12)}

X1

v11

X3

v32

X2

v31

X2

v12

Page 51: 5.5 back track

51

Backtracking Search(3 variables)

Assignment = {(X1,v12), (X2,v21)}

X1

v11

X3

v32

X2

v31

X2

v12

v21

X2

Page 52: 5.5 back track

52

Backtracking Search(3 variables)

Assignment = {(X1,v12), (X2,v21)}

X1

v11

X3

v32

X2

v31

X2

v12

v21

X2

The algorithm need not considerthe variables in the same order inthis sub-tree as in the other

Page 53: 5.5 back track

53

Backtracking Search(3 variables)

Assignment = {(X1,v12), (X2,v21), (X3,v32)}

X1

v11

X3

v32

X2

v31

X2

v12

v21

X2

v32

X3

Page 54: 5.5 back track

54

Backtracking Search(3 variables)

Assignment = {(X1,v12), (X2,v21), (X3,v32)}

X1

v11

X3

v32

X2

v31

X2

v12

v21

X2

v32

X3

The algorithm need not consider the valuesof X3 in the same order in this sub-tree

Page 55: 5.5 back track

55

Backtracking Search(3 variables)

Assignment = {(X1,v12), (X2,v21), (X3,v32)}

X1

v11

X3

v32

X2

v31

X2

v12

v21

X2

v32

X3

Since there are onlythree variables, theassignment is complete

Page 56: 5.5 back track

56

Backtracking Algorithm

CSP-BACKTRACKING(A)1. If assignment A is complete then return A2. X select a variable not in A3. D select an ordering on the domain of X4. For each value v in D do

a. Add (Xv) to Ab. If A is valid then

i. result CSP-BACKTRACKING(A)ii. If result failure then return result

5. Return failure

Call CSP-BACKTRACKING({})

[This recursive algorithm keeps too much data in memory. An iterative version could save memory (left as an exercise)]

Page 57: 5.5 back track

57

Map Coloring{}

WA=red WA=green WA=blue

WA=redNT=green

WA=redNT=blue

WA=redNT=greenQ=red

WA=redNT=greenQ=blue

WA

NT

SA

Q

NSWV

T

Page 58: 5.5 back track

58

Chapter Summary

Backtracking is an algorithm design technique for solving problems in which the number of choices grows at least exponentially with their instant size.

This approach makes it possible to solve many large instances of NP-hard problems in an acceptable amount of time.

The technique constructs a pruned state space tree.

Backtracking constructs its state-space tree in the depth-first search fashion in the majority of its applications.