[SER222] Recurrences (3/7): Solving Towers of Hanoi

Ruben Acuna
22 Sept 201705:04

Summary

TLDREl video explica el algoritmo para resolver el problema de las Torres de Hanoi. Se discute la estrategia de mover los discos más pequeños primero, luego los más grandes y finalmente los restantes más pequeños. Se presenta el pseudocódigo para resolver el rompecabezas con 'n' discos, incluyendo la función 'move' para trasladar un disco de un poste a otro. El vídeo detalla los pasos del algoritmo: mover 'n-1' discos al poste temporal, trasladar el disco más grande al poste final y, por último, mover los 'n-1' discos restantes al poste final. La explicación termina con la pregunta de cuántas movimientos se necesitan para resolver el rompecabezas.

Takeaways

  • 🧩 El algoritmo de Torres de Hanoi resuelve el problema mediante la descomposición en subproblemas más pequeños.
  • 📜 El pseudo código dado tiene cuatro parámetros: Start (inicio), Temp (temporal), End (final) y n (tamaño de la torre).
  • ⚙️ Move es una función encapsulada que realiza la operación básica de mover un disco de una varilla a otra.
  • 🧱 El caso base ocurre cuando n es igual a 1, lo que significa que solo hay un disco para mover, resolviéndose sin recurrencia.
  • 🔁 Para n mayor que 1, se necesita aplicar tres pasos que involucran la recursividad para mover los discos.
  • 🔀 Primero, se mueve el subgrupo de discos n-1 desde Start a Temp usando End como espacio temporal.
  • ➡️ Luego, el disco más grande se mueve de Start a End directamente.
  • 🔄 Finalmente, se mueve el subgrupo de discos n-1 desde Temp a End para completar el problema.
  • 🎯 El algoritmo sigue tres pasos principales: mover una torre pequeña, mover el disco más grande, y mover la torre pequeña nuevamente.
  • ⏱️ Al final, la solución busca determinar cuántos movimientos requiere este método para resolver el problema completo.

Q & A

  • ¿Cuál es el propósito del algoritmo de las Torres de Hanói presentado en el video?

    -El propósito del algoritmo es resolver el problema de las Torres de Hanói para una cantidad 'n' de discos, moviéndolos de una torre inicial a una torre final utilizando una torre temporal.

  • ¿Qué representa la variable 'n' en el pseudocódigo?

    -'n' representa el tamaño de la torre, es decir, el número de discos que se desea mover de la torre inicial a la torre final.

  • ¿Qué sucede cuando 'n' es igual a 1 en el pseudocódigo?

    -Cuando 'n' es igual a 1, el problema se reduce a un caso base, donde solo se necesita mover un disco directamente de la torre inicial a la torre final sin necesidad de recurrir a más pasos.

  • ¿Cuáles son los cuatro parámetros principales en el pseudocódigo?

    -Los cuatro parámetros son: 'Start', la torre de inicio; 'Temp', la torre temporal; 'End', la torre final; y 'n', que indica el número de discos en la torre.

  • ¿Cuál es el rol de la torre temporal en la solución?

    -La torre temporal ('Temp') se utiliza como espacio intermedio para mover discos mientras se transfiere el resto desde la torre inicial a la torre final.

  • ¿Qué representa la función 'move' en el algoritmo?

    -La función 'move' encapsula la acción de mover un disco de una torre a otra. Es una operación básica dentro del algoritmo.

  • ¿Cómo se divide el problema cuando 'n' es mayor que 1?

    -Cuando 'n' es mayor que 1, el problema se divide en tres pasos: primero, mover 'n-1' discos de la torre inicial a la torre temporal; luego, mover el disco más grande a la torre final; y finalmente, mover los 'n-1' discos desde la torre temporal a la torre final.

  • ¿Qué acción se realiza después de mover el disco más grande a la torre final?

    -Después de mover el disco más grande a la torre final, se mueve la torre de tamaño 'n-1' que estaba en la torre temporal a la torre final.

  • ¿Cuántos movimientos realiza el algoritmo para resolver el problema?

    -El número total de movimientos realizados por el algoritmo depende de la cantidad de discos 'n'. El video plantea esta pregunta, pero no proporciona una respuesta exacta en este momento.

  • ¿Por qué es importante el uso de la recursión en el algoritmo?

    -La recursión es crucial en el algoritmo porque permite descomponer el problema en subproblemas más pequeños, moviendo torres parciales de discos hasta que se alcanza el caso base con 'n=1'.

Outlines

00:00

🔍 Introducción a la solución del problema de las Torres de Hanoi

Ruben Acuña presenta el tema del video: la solución algorítmica para el problema de las Torres de Hanoi. Se refiere al concepto general de mover torres más pequeñas, luego discos más grandes, y finalmente una torre más pequeña para resolver el rompecabezas. También introduce el pseudocódigo que explica cómo resolver el problema para un número 'n' de discos y menciona que los movimientos entre varillas ya están modelados en una estructura de datos preexistente.

📜 Explicación del pseudocódigo para las Torres de Hanoi

Se presenta el pseudocódigo para resolver las Torres de Hanoi, que incluye cuatro parámetros principales: 'Start' (varilla inicial), 'Temp' (varilla temporal), 'End' (varilla final), y 'n' (tamaño de la torre). Ruben describe cómo se configuraría el problema inicialmente, con los discos comenzando en la primera varilla, usando la varilla del medio como temporal, y moviéndolos al final en la tercera varilla.

🔢 Caso base del algoritmo

El caso base del algoritmo se activa cuando 'n' es igual a 1, lo que significa que solo hay un disco por mover. En este escenario, el único paso necesario es trasladar el disco de la varilla inicial a la varilla final sin recurrir a recursión, ya que el problema es trivial con un solo disco.

↪️ Descomposición recursiva del problema

Cuando 'n' es mayor que 1, el problema se vuelve más complejo y requiere tres pasos. El primero es mover 'n-1' discos desde la varilla inicial a la varilla temporal, usando la varilla final como apoyo. En este caso, por ejemplo, se moverían dos discos desde la varilla 1 a la varilla 2, dejando el disco más grande en la varilla inicial.

⬆️ Movimiento del disco más grande

Una vez que los discos más pequeños se han movido a la varilla temporal, el disco más grande que queda en la varilla inicial se puede trasladar directamente a la varilla final, que es su destino.

🔄 Completar el rompecabezas

En el último paso, los discos en la varilla temporal se mueven a la varilla final para completar el rompecabezas. Ruben muestra cómo estos tres pasos se corresponden con las líneas de pseudocódigo, y al final del proceso, todos los discos se trasladan de la varilla inicial a la varilla final, resolviendo el rompecabezas.

Mindmap

Keywords

💡Torres de Hanoi

Las Torres de Hanoi es un rompecabezas matemático que consiste en mover un conjunto de discos de diferentes tamaños de una varilla a otra, siguiendo reglas específicas. En el video, se utiliza como un ejemplo práctico para explicar un algoritmo recursivo. El objetivo es mover todos los discos de una varilla inicial a una varilla final utilizando una varilla temporal, lo que refleja la estructura de muchos problemas de computación.

💡Recursividad

La recursividad es un concepto clave en el video, que se refiere a la técnica de resolución de problemas donde una función se llama a sí misma para resolver subproblemas más pequeños. En el contexto de las Torres de Hanoi, se usa para dividir el problema en partes más manejables: mover un subconjunto de discos, luego mover el disco más grande, y finalmente mover el subconjunto restante.

💡Caso base

El caso base es una parte fundamental de un algoritmo recursivo que define la condición en la que la recursión deja de llamarse a sí misma. En el video, el caso base ocurre cuando 'n' es igual a 1, es decir, cuando solo hay un disco para mover, lo que se puede hacer directamente sin recurrir a subproblemas.

💡Algoritmo

Un algoritmo es una secuencia de pasos o instrucciones para resolver un problema. En este caso, el video describe un algoritmo que resuelve el problema de las Torres de Hanoi para 'n' discos, utilizando un enfoque recursivo. El pseudo código presentado ilustra cómo realizar estos pasos de manera sistemática.

💡Varillas

Las varillas representan los tres lugares donde se pueden colocar los discos en el problema de las Torres de Hanoi. Son las posiciones 'Inicio', 'Temporal' y 'Final'. En el video, se hace referencia a cómo se mueven los discos entre estas varillas, siendo la varilla temporal un espacio de almacenamiento intermedio.

💡Discos

Los discos son los objetos que se deben mover entre las varillas en el rompecabezas de las Torres de Hanoi. En el video, se explica cómo el número de discos ('n') afecta la complejidad del problema y cómo el algoritmo los maneja mediante movimientos secuenciales y recursivos.

💡Pseudo código

El pseudo código es una representación informal de un algoritmo que no utiliza un lenguaje de programación específico. En el video, se presenta el pseudo código para resolver el problema de las Torres de Hanoi, lo que facilita la comprensión del proceso lógico detrás del algoritmo sin necesidad de enfocarse en detalles de sintaxis.

💡Función mover

La función 'mover' encapsula la operación básica de mover un disco de una varilla a otra. En el video, se menciona que esta función es fundamental para el algoritmo, ya que cada llamada recursiva se reduce finalmente a una serie de movimientos de discos entre las varillas.

💡Complejidad del algoritmo

La complejidad del algoritmo se refiere a cuántos pasos se necesitan para resolver el problema, especialmente en función del número de discos ('n'). En el video, se plantea la pregunta sobre cuántos movimientos totales son necesarios para completar el rompecabezas, lo que depende de la cantidad de discos y la estructura recursiva del algoritmo.

💡Descomposición del problema

La descomposición del problema es una estrategia clave en el video, que se refiere a dividir un problema grande en subproblemas más pequeños. En el contexto de las Torres de Hanoi, se descompone el problema en mover una torre más pequeña, mover el disco más grande, y luego mover de nuevo la torre más pequeña.

Highlights

Introduction to the Towers of Hanoi algorithm

Explanation of the general strategy for solving the puzzle

Pseudo code for an algorithm to solve Towers of Hanoi with 'n' disks

Assumptions about the data structure for rods and disks

Encapsulation of the move functionality

The importance of the move operation in the algorithm

Parameters of the Towers of Hanoi pseudo code

Role of Start, Temp, and End rods in the algorithm

Explanation of the tower size variable 'n'

Base case for a tower of size one

Recursive steps for towers greater than one disk

First recursive step: Moving n-1 disks to the temp rod

Second recursive step: Moving the largest disk to the end rod

Third recursive step: Moving the n-1 disks from temp to end

Mapping the recursive steps to the pseudo code

Completion of the puzzle by moving all disks to the end rod

Question about the number of moves required by the algorithm

Transcripts

play00:04

- [Ruben Acuña] In this video, I want to discuss

play00:06

the actual algorithm for solving Towers of Hanoi.

play00:09

So, as previously discussed,

play00:10

there is kind of this general notion

play00:11

of how we can move smaller towers and then larger disks

play00:14

and then a smaller tower again,

play00:15

in order to solve the general problem, right?

play00:17

Solve the general puzzle.

play00:19

So the pseudo code that does it is actually here on

play00:20

the right hand side.

play00:22

So this is the pseudo code for an algorithm

play00:24

that could play a game of Towers of Hanoi for

play00:28

an "n" sized number of disks.

play00:31

So we have some basic assumptions.

play00:33

First of all we're going to say that the rods and disks

play00:34

are already modeled with some data structure,

play00:36

we're not gonna talk about that right,

play00:37

this is just pseudo code.

play00:39

And then that's gonna be kind of encapsulated

play00:41

by something called move.

play00:42

So there's some bit of functionality out there

play00:44

which encapsulates moving a disk

play00:45

from one particular rod to another one.

play00:47

Alright, so we're just gonna say that's out there.

play00:49

Um, and that will actually end up being,

play00:52

because that's kind of a basic operation

play00:53

and it will take a little bit of time,

play00:54

be the thing that we write a growth function for.

play00:57

Okay, so let's take a look at the code

play00:58

on the right hand side.

play00:59

So we have our Towers of Hanoi pseudo code here.

play01:02

So you can see that there are four parameters

play01:04

to this bit of pseudo code.

play01:05

So, Start is basically, what rod do we want to start on,

play01:10

Temp is the working one, right?

play01:11

There's three that are available to us, right?

play01:13

So where can we put kind of spare things.

play01:15

And then End which is the last rod right?

play01:17

The one where I wanna move everything to it.

play01:20

Final variable there, n, is the tower size, right?

play01:22

How many disks do I want to use?

play01:25

So the first time I call this, right, if I were trying to

play01:27

solve the Towers of Hanoi problem, I would say that Start is

play01:30

one, because all the disks initially start there

play01:31

on the left hand side.

play01:33

They use the middle rod as a kind of, a temporary space

play01:36

to move things, and I'm trying to move

play01:38

them to the End, right? The third most, rod.

play01:41

In the example we did by hand we had three disks

play01:43

so, n initially would be three.

play01:46

That's how things would start out.

play01:47

Take a look at this program, what exactly is happening?

play01:50

First we have, if n equal one.

play01:52

So this is our, kind of our base case, right,

play01:54

the simplest possible puzzle I could solve,

play01:56

happens to be when I'm moving one disk from

play01:58

one tower to another.

play01:59

In that case, basically it's given

play02:00

that it's gonna work for me.

play02:03

So, in that case if I have a tower of size one

play02:08

what I, the only thing I need to do is call move

play02:11

to go from Start to End.

play02:12

So I'm moving one final piece.

play02:15

So, that's the simplest tower I could possibly move,

play02:16

don't require any recursion there, everything is good.

play02:19

Else, right, n is the greater than one, so it's at least two

play02:22

I need to do a little bit of more work.

play02:24

So there's three steps in here,

play02:26

that we had basically talked about when we looked

play02:28

at doing the trace by hand of

play02:30

how exactly we'd move things along.

play02:35

So the first line is going to move n minus one disks

play02:38

from the first tower,

play02:43

to the, uh last tower.

play02:46

Well to the temp tower.

play02:47

So the parameters, right, the parameters

play02:49

are set up so the first thing is you're,

play02:50

where you're getting disks from,

play02:52

the last thing is where you're getting disks to.

play02:54

So what this line is saying is,

play02:54

take disks from the start tower, starting tower,

play02:58

use the n tower as a temporary and the temporary

play03:02

as the target, right, so we're moving n minus to, right,

play03:04

meaning for example here, n minus one,

play03:08

meaning here for example two items, right,

play03:11

from that first tower to the middle tower.

play03:14

Alright, that's where we're doing our, kind of our first

play03:16

partial decomposition of this tower, right?

play03:17

To move a couple parts of it.

play03:20

So we do that, first thing.

play03:23

And here right, the way this code is looking, right, is

play03:25

we're moving from Start to Temp, right.

play03:27

So, we're moving from rod one to rod two.

play03:31

Rod three is where our End is,

play03:32

we don't want to touch that right now.

play03:33

The second step is to move from Start to End, right.

play03:35

After you move that, that smaller tower, right the

play03:37

n minus one tower, off of that starting rod,

play03:39

that means the only thing left there is the biggest disk.

play03:41

So that biggest disk, I can move it where it finally belongs

play03:43

right, it belongs on the right hand side, on that peg.

play03:48

So that moves from one to three.

play03:51

Right, this is from one to two, this is from

play03:56

one...

play03:58

to three.

play04:00

Then we can go over here and basically say,

play04:01

okay I need to finish my work,

play04:03

which my work is to then to go from,

play04:09

from the middle point, right, the Temp, right,

play04:11

which is, which is number two, over to number three.

play04:14

Right, I have at this point, right, so, so,

play04:16

if I jump back to my other slide for a second,

play04:20

alright, my initial process is basically to say

play04:22

okay I'm going to from that initial state to the state

play04:25

where I have, the n minus one tower moved to the middle,

play04:30

right, that's, that's here.

play04:31

Then I also move that one piece,

play04:33

from the first to the very end,

play04:35

and then once I have that,

play04:36

I move the two pieces from the middle to the very end.

play04:39

Which gets me this over here.

play04:41

Right, so those are the three things that are basically

play04:42

the map to these different pieces of code over here, right.

play04:45

We do, we move a smaller tower,

play04:47

move one piece and then move the smaller tower.

play04:49

At the end of the day, well hey, we've moved everything

play04:51

from the starting peg to the ending one.

play04:54

So in that case, right, we've moved everything along

play04:56

and we've at least, you know, solved the puzzle.

play04:59

So now the question is, just how many moves does

play05:02

this particular method make?

Rate This

5.0 / 5 (0 votes)

Связанные теги
AlgoritmoTorres de HanoiRecursiónProgramaciónPseudocódigoDiscosMatemáticasDesafío lógicoEstructura de datosResolución de problemas
Вам нужно краткое изложение на английском?