Tower of Hanoi

1 / 60

# Tower of Hanoi - PowerPoint PPT Presentation

Tower of Hanoi. AE1APS Algorithmic Problem Solving John Drake. Outline of the course. Invariants – Chapter 2 River Crossing – Chapter 3 Logic Puzzles – Chapter 5 Matchstick Games - Chapter 4 Sum Games – Chapter 4 Induction – Chapter 6 Tower of Hanoi – Chapter 8. A recap on induction.

I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.

## PowerPoint Slideshow about 'Tower of Hanoi' - pekelo

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.

- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

### Tower of Hanoi

AE1APS Algorithmic Problem Solving

John Drake

Outline of the course
• Invariants – Chapter 2
• River Crossing – Chapter 3
• Logic Puzzles – Chapter 5
• Matchstick Games - Chapter 4
• Sum Games – Chapter 4
• Induction – Chapter 6
• Tower of Hanoi – Chapter 8
A recap on induction
• Breaking larger problems down into sub-problems
• Using small instances of a problem to help us solve larger instances
• Find a trivial base case where size = 0
• Show for an arbitrary number n how to solve n + 1 (induction step)
Tower of Hanoi - Introduction
• This problem is discussed in many maths texts, and is used in computer science and AI as an illustration of recursion and problem solving
• You probably know the problem, but we will look at it slightly differently
• Induction gives a systematic way of finding a solution
• However this solution is undesirable
• A better solution is obtained by observing the invariants of the inductive solution
Begin with the solution
• We will start at the end
• We begin with the solution (as you probably already know it) and you can see where we are going
• Another reason is to understand why a correct solution has been found, if no information about the solution method is provided
Problem specification
• There is a temple in Bramah, where there are 3 giant poles fixed in the ground.
• On the first pole, God placed 64 discs, each of different size in decreasing order of size
• The Brahmin monks were given the task of moving the discs, one per day, from one pole to another
• However, no disc must be above a smaller disc, when on the same pole
Triangle representation
• Almost every book (and webpage) I have seen draws the 3 poles in a line
• We can call the poles A, B, C
• However there is a simple symmetry which is being ignored here
Triangle representation
• We draw them in different positions
• A better way is to draw and equilateral triangle, and the symmetry is obvious.
• Now the moves of the discs can easily be described as clockwise or anti-clockwise.
Iterative solution (assumptions)
• There is a very easy solution to the Towers of Hanoi problem
• It is easy to remember and execute
• We assume the problem is to move the discs from one pole to the next in the clockwise direction
• The days are numbered from 0, 1, 2…
• On day 0, the discs are placed in their initial position, and the monks begin moving the discs on day 1.
Iterative solution 1
• On every alternate day, the smallest disk is moved
• The smallest disc should cycle around the poles.
• The direction of rotation depends on the number of discs
• It the total number is odd, it cycles clockwise, otherwise if the total is even, it cycles anticlockwise
Iterative solution 2
• On every other day, another disc is moved (other than the smallest disc)
• As no disc can be on a smaller disc, there is only one possible move for the disc
• The algorithm terminates when no further moves are possible
• That is, on a even numbered day when all the discs are on the same pole
Why?
• Presenting the solution like this, provides us with no help in understanding how the solution was constructed
• How would we give a formal mathematical verification of the correctness of the algorithm
• By observing a number of invariants, we show how to derive the algorithm from the inductive solution.
Inductive solution
• Suppose the task is to move M discs from one pole to another specific pole.
• Base case. When there are 0 discs, no steps are needed to complete the task
• For the inductive step, we assume we can move n discs from A to B, and the problem is to show how to move n+1 discs from A to B
• We get stuck with this approach
Stuck
• First move n top discs from A to B
• After doing this, all the discs are on B
• We have no hypothesis about moving discs from this pole
• i.e. The information that we can move n discs from A to B does not help us in trying to move n+1 from A to B
Still stuck
• Alternatively, we can move the smallest from pole A to pole C
• We then move n discs from A to B
• Once again we have exhausted all possibilities of using the inductive hypothesis
• Because the n discs are on pole B and we have no hypothesis about moving discs from this pole.
Too Specific
• We have been too specific about the inductive hypothesis
• The way out of this is to introduce some parameters which model the start and final positions of the discs
Rotational symmetry
• We make a crucial decision
• Rather than name the poles A B C, we observe that the problem exhibits a rotational symmetry
• This is obvious when the poles are arranged in a triangle, but obscured when the poles are placed in a line.
• One additional parameter needs to be introduced, the direction of movement
• We only need to say if a particular disc needs to be moved in a clockwise or anti- clockwise direction
• The generalisation of the problem becomes, how to move n discs from one pole to the next in the direction d
• (where d is either clockwise or anti-clockwise)
Inductive hypothesis
• The inductive hypothesis we use is that it is possible to move the n smallest discs from one pole to another in direction d beginning from any valid starting point
• That is, a starting position in which the discs are distributed arbitrarily over the poles, but no disc is on top of a disc smaller than itself
• This is a far more general definition
Base and inductive case
• For n = 0, the sequence of moves is empty.
• In the case of n+1 discs, we assume we have a method of moving the n smallest discs from one pole to one of the other two poles.
• We must show how to move n+1 discs from one pole to another pole in direction d, where d is either clockwise or anticlockwise.
• Assume the discs are numbered 1 upwards (with the smallest disc numbered 1)
Using the inductive hypothesis
• There is little choice in exploiting the inductive hypothesiswe can begin by moving the n smallest discs in the direction d, or direction ¬d.
• The solution is to move the n discs in direction ¬d, then the n+1thdisc can be moved in direction d
• We can then use the inductive hypothesis again to move the n smallest discs in the direction ¬d.
• This places the n discs above the n+1th disc, and all of the n+1 smallest discs have now been moved from their original position to a new pole in direction d
For n+1 (i.e. 3+1 = 4)
• We can use the previous solution to get a solution for n+1 using the inductive step
Psuedocode
• The following code summarises the inductive solution to the problem
• Hn(d) is the sequence of pairs <k,d’> where n in the number of discs, k is a disc number and d and d’ are directions
• Directions are Boolean values, true representing clockwise, and false representing anti-clockwise
• The pair <k, d’> means, move disc number k from its current position in the direction d’
• The pair is therefore an action.
• We use the ; to separate movements.
Hn(d)
• Hn(d) means the sequence to move the n smallest discs in direction d
• Taking the pairs in order from left to right, the complete sequence Hn(d) prescribes how to move the n smallest discs, one by one, from one pole to another in direction d
Psuedocode
• Hn(d)
• H0(d)= []

– base case (i.e. 0 moves needed)

• Hn+1(d) = Hn(¬d) ; [<n+1, d>] ; Hn(¬d)

– induction step (move n discs in a given direction, move the n+1th disc in the opposite direction then move n discs again in the same direction)

Psuedocode
• Notice that the procedure name, H, occurs on both sides of the equation for Hn+1(d)
• Hn+1(d) = Hn(¬d) ; [<n+1, d>] ; Hn(¬d)
• For this reason we call this a recursive solution (i.e. the procedure calls itself, think of Java)
How to use
• This inductive procedure gives us a way to generate the solution to the problem for any size n
• We simply use the rules as rewrite rules, until all occurrences of H have been eliminated
• i.e. we are left with just a sequence of actions
• (e.g. move disc 3 clockwise)
H2(cw)
• Let us use cw and aw to mean clockwise and anti-clockwise, rather than true and false to improve readability
• Calculate H2(cw) i.e. how to move 2 discs, one pole in a clockwise direction
• Equation (1)
• H0(d) = []
• Equation (2)
• Hn+1(d) = Hn(¬d) ; [<n+1, d>] ; Hn(¬d)
H3(cw)?
• Exercise – Can you do H3(aw)?
• Can you see a pattern in the number of moves required for n discs? i.e. H0,H1, H2, H3…
• Show this as a formula in terms of n?
• If this is easy, try exercise 8.3 a) (without cheating and looking at the answer first) 