0% found this document useful (0 votes)
19 views42 pages

Recursive Backtracking in Problem Solving

The document describes recursive backtracking and how it can be used to solve problems that involve searching large problem spaces. It provides the example of solving a Sudoku puzzle through brute force by trying all possible combinations until finding a valid solution. When a dead end is reached, the algorithm backs up to the previous choice and tries a new option, remembering the state to allow progressing forward again if possible. Recursive backtracking is well-suited for such problems because placing a number in a Sudoku cell results in a smaller remaining problem similar to the original one.

Uploaded by

Denisa Corbu
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
19 views42 pages

Recursive Backtracking in Problem Solving

The document describes recursive backtracking and how it can be used to solve problems that involve searching large problem spaces. It provides the example of solving a Sudoku puzzle through brute force by trying all possible combinations until finding a valid solution. When a dead end is reached, the algorithm backs up to the previous choice and tries a new option, remembering the state to allow progressing forward again if possible. Recursive backtracking is well-suited for such problems because placing a number in a Sudoku cell results in a smaller remaining problem similar to the original one.

Uploaded by

Denisa Corbu
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd

Topic 13 Recursive Backtracking

"In ancient times, before computers were invented, alchemists studied the mystical properties of numbers. Lacking computers, they had to rely on dragons to do their work for them. The dragons were clever beasts, but also lazy and bad-tempered. The worst ones would sometimes burn their keeper to a crisp with a single fiery belch. But most dragons were merely uncooperative, as violence required too much energy. This is the story of how Martin, an alchemists apprentice, discovered recursion by outsmarting a lazy dragon."
- David S. Touretzky, Common Lisp: A Gentle Introduction to Symbolic Computation

Backtracking
Start Success!

Success!

Failure

Problem space consists of states (nodes) and actions (paths that lead to new states). When in a node can can only see paths to connected nodes If a node only leads to failure go back to its "parent" node. Try other alternatives. If these all lead to failure then more backtracking may be necessary.
CS314 Recursive Backtracking

A More Concrete Example


Sudoku 9 by 9 matrix with some numbers filled in all numbers must be between 1 and 9 Goal: Each row, each column, and each mini matrix must contain the numbers between 1 and 9 once each
no duplicates in rows, columns, or mini matrices
CS314 Recursive Backtracking

Solving Sudoku Brute Force


A brute force algorithm is a simple but general approach Try all combinations until you find one that works This approach isnt clever, but computers are fast Then try and improve on the brute force resuts
CS314 Recursive Backtracking

Solving Sudoku
Brute force Sudoku Soluton
if not open cells, solved scan cells from left to right, top to bottom for first open cell When an open cell is found start cycling through digits 1 to 9. When a digit is placed check that the set up is legal now solve the board
CS314 Recursive Backtracking

Attendance Question 1
After placing a number in a cell is the remaining problem very similar to the original problem? A. Yes B. No

CS314 Recursive Backtracking

Solving Sudoku Later Steps


1 1 2 1 2 4

1 2

4 8

1 2

4 8 9

uh oh!

CS314 Recursive Backtracking

Sudoku A Dead End


We have reached a dead end in our search
1 2 4 8 9

With the current set up none of the nine digits work in the top right corner
CS314 Recursive Backtracking

Backing Up
When the search reaches a dead end in backs up to the previous cell it was trying to fill and goes onto to the next digit We would back up to the cell with a 9 and that turns out to be a dead end as well so we back up again
so the algorithm needs to remember what digit to try next
1 2 4 8 9

1 2

4 9

Now in the cell with the 8. We try and 9 and move forward again.
CS314 Recursive Backtracking

Characteristics of Brute Force and Backtracking


Brute force algorithms are slow The don't employ a lot of logic
For example we know a 6 can't go in the last 3 columns of the first row, but the brute force algorithm will plow ahead any way

But, brute force algorithms are fairly easy to implement as a first pass solution
many backtracking algorithms are brute force algorithms
CS314 Recursive Backtracking

10

Key Insights
After trying placing a digit in a cell we want to solve the new sudoku board
Isn't that a smaller (or simpler version) of the same problem we started with?!?!?!?

After placing a number in a cell the we need to remember the next number to try in case things don't work out. We need to know if things worked out (found a solution) or they didn't, and if they didn't try the next number If we try all numbers and none of them work in our cell we need to report back that things didn't work
CS314 Recursive Backtracking

11

Recursive Backtracking
Problems such as Suduko can be solved using recursive backtracking recursive because later versions of the problem are just slightly simpler versions of the original backtracking because we may have to try different alternatives

CS314 Recursive Backtracking

12

Recursive Backtracking
Pseudo code for recursive backtracking algorithms If at a solution, report success for( every possible choice from current state / node)
Make that choice and take one step along path Use recursion to solve the problem for the new node / state If the recursive call succeeds, report the success to the next higher level Back out of the current choice to restore the state at the beginning of the loop.

Report failure
CS314 Recursive Backtracking

13

Goals of Backtracking
Possible goals
Find a path to success Find all paths to success Find the best path to success

Not all problems are exactly alike, and finding one success node may not be the end of the search
Start Success!

Success!
CS314 Recursive Backtracking

14

The 8 Queens Problem

CS314 Recursive Backtracking

15

The 8 Queens Problem


A classic chess puzzle
Place 8 queen pieces on a chess board so that none of them can attack one another

CS314 Recursive Backtracking

16

The N Queens Problem


Place N Queens on an N by N chessboard so that none of them can attack each other Number of possible placements? In 8 x 8
64 * 63 * 62 * 61 * 60 * 59 * 58 * 57 = 178,462, 987, 637, 760 / 8! = 4,426,165,368 n choose k How many ways can you choose k things from a set of n items? In this case there are 64 squares and we want to choose 8 of them to put queens on
CS314 Recursive Backtracking

17

Attendance Question 2
For valid solutions how many queens can be placed in a give column? A. 0 B. 1 C. 2 D. 3 E. 4 F. Any number
CS314 Recursive Backtracking

18

Reducing the Search Space


The previous calculation includes set ups like this one Q
Q

Q Includes lots of set ups with Q multiple queens in the same Q column Q Q How many queens can there be Q in one column? Number of set ups 8 * 8 * 8 * 8 * 8 * 8 * 8 * 8 = 16,777,216 We have reduced search space by two orders of magnitude by applying some logic
CS314 Recursive Backtracking

19

A Solution to 8 Queens
If number of queens is fixed and I realize there can't be more than one queen per column I can iterate through the rows for each column
for(int r0 = 0; r0 < 8; r0++){ board[r0][0] = 'q'; for(int r1 = 0; r1 < 8; r1++){ board[r1][1] = 'q'; for(int r2 = 0; r2 < 8; r2++){ board[r2][2] = 'q'; // a little later for(int r7 = 0; r7 < 8; r7++){ board[r7][7] = 'q'; if( queensAreSafe(board) ) printSolution(board); board[r7][7] = ' '; //pick up queen } board[r6][6] = ' '; // pick up queen CS314 20
Recursive Backtracking

N Queens
The problem with N queens is you don't know how many for loops to write. Do the problem recursively Write recursive code with class and demo
show backtracking with breakpoint and debugging option

CS314 Recursive Backtracking

21

Recursive Backtracking
You must practice!!! Learn to recognize problems that fit the pattern Is a kickoff method needed? All solutions or a solution? Reporting results and acting on results

CS314 Recursive Backtracking

22

Minesweeper

CS314 Recursive Backtracking

23

Minesweeper click a cell

Minesweeper Reveal Algorithm

if bomb game over if cell that has 1 or more bombs on border then reveal the number of bombs that border cell if a cell that has 0 bombs on border then reveal that cell as a blank and click on the 8 surrounding cells

CS314 Recursive Backtracking

24

Another Backtracking Problem A Simple Maze


Search maze until way out is found. If no way out possible report that.

CS314 Recursive Backtracking

25

The Local View


Which way do I go to get out? West East

North

CS314

Behind me, to the South is a door leading South


Recursive Backtracking

26

Modified Backtracking Algorithm for Maze


If the current square is outside, return TRUE to indicate that a solution has been found. If the current square is marked, return FALSE to indicate that this path has been tried. Mark the current square. for (each of the four compass directions) { if ( this direction is not blocked by a wall ) { Move one step in the indicated direction from the current square. Try to solve the maze from there by making a recursive call. If this call shows the maze to be solvable, return TRUE to indicate that fact. } } Unmark the current square. Return FALSE to indicate that none of the four directions led to a solution.

CS314 Recursive Backtracking

27

Backtracking in Action

The crucial part of the algorithm is the for loop that takes us through the alternatives from the curren square. Here we have move to the North.

for (dir = North; dir <= West; dir++) { if (!WallExists(pt, dir)) {if (SolveMaze(AdjacentPoint(pt, dir))) return(TRUE); }
CS314 Recursive Backtracking

28

Backtracking in Action
Here we have moved North again, but there is a wall to the North . East is also blocked, so we try South. That call discovers that the square is marked, so it just returns.

CS314 Recursive Backtracking

29

So the next move we can make is West. Where is this leading?

CS314 Recursive Backtracking

30

This path reaches a dead end. Time to backtrack! Remember the program stack!

CS314 Recursive Backtracking

31

The recursive calls end and return until we find ourselves back here.

CS314 Recursive Backtracking

32

And now we try South

CS314 Recursive Backtracking

33

Path Eventually Found

CS314 Recursive Backtracking

34

More Backtracking Problems

CS314 Recursive Backtracking

35

Other Backtracking Problems


Knight's Tour Regular Expressions Knapsack problem / Exhaustive Search
Filling a knapsack. Given a choice of items with various weights and a limited carrying capacity find the optimal load out. 50 lb. knapsack. items are 1 40 lb, 1 32 lb. 2 22 lbs, 1 15 lb, 1 5 lb. A greedy algorithm would choose the 40 lb item first. Then the 5 lb. Load out = 45lb. Exhaustive search 22 + 22 + 5 = 49.
CS314 Recursive Backtracking

36

The CD problem
We want to put songs on a Compact Disc. 650MB CD and a bunch of songs of various sizes.
If there are no more songs to consider return result else{ Consider the next song in the list. Try not adding it to the CD so far and use recursion to evaluate best without it. Try adding it to the CD, and use recursion to evaluate best with it Whichever is better is returned as absolute best from here }

CS314 Recursive Backtracking

37

Another Backtracking Problem


Airlines give out frequent flier miles as a way to get people to always fly on their airline. Airlines also have partner airlines. Assume if you have miles on one airline you can redeem those miles on any of its partners. Further assume if you can redeem miles on a partner airline you can redeem miles on any of its partners and so forth...
Airlines don't usually allow this sort of thing.

Given a list of airlines and each airlines partners determine if it is possible to redeem miles on a given airline A on another airline B.
CS314 Recursive Backtracking

38

Airline List Part 1


Delta
partners: Air Canada, Aero Mexico, OceanAir

United
partners: Aria, Lufthansa, OceanAir, Quantas, British Airways

Northwest
partners: Air Alaska, BMI, Avolar, EVA Air

Canjet
partners: Girjet

Air Canda
partners: Areo Mexico, Delta, Air Alaska

Aero Mexico
partners: Delta, Air Canda, British Airways

CS314 Recursive Backtracking

39

Airline List - Part 2


Ocean Air
partners: Delta, United, Quantas, Avolar

AlohaAir
partners: Quantas

Aria
partners: United, Lufthansa

Lufthansa
partners: United, Aria, EVA Air

Quantas
partners: United, OceanAir, AlohaAir

BMI
partners: Northwest, Avolar

Maxair
partners: Southwest, Girjet
CS314 Recursive Backtracking

40

Airline List - Part 3


Girjet
partners: Southwest, Canjet, Maxair

British Airways
partners: United, Aero Mexico

Air Alaska
partners: Northwest, Air Canada

Avolar
partners: Northwest, Ocean Air, BMI

EVA Air
partners: Northwest, Luftansa

Southwest
partners: Girjet, Maxair
CS314 Recursive Backtracking

41

Problem Example
If I have miles on Northwest can I redeem them on Aria? Partial graph:
Ocean Air

BMI

Avolar

Northwest

Air Alaska EVA Air

CS314 Recursive Backtracking

42

You might also like