2. INTRODUCCIÓN
Desde la antigüedad se han visto los problemas con un grado complejo
queriendo buscar una única solución radical y exacta al mismo, con el
pasar del tiempo esta búsqueda ha dado como resultados muchos métodos
para ver y encontrarle de distintas formas la solución de estos desde el mas
pequeño hasta el mas grande desde el mas simple hasta el mas complejo!
Uno de los principales métodos es el de Divide y Vencerás, haciendo así la
división del problema en partes para luego al juntarlas tener una solución
optima.
3. DIVIDE Y VENCERÁS
Al igual que en la programación dinámica y algoritmos ávidos, se
busca resolver un problema a través de sus partes. La idea básica es
ir dividiendo el problema en partes (generalmente dos) e intentar
resolverlas. Si las partes son todavía demasiado complejas, se
vuelven a partir. Se repite esto recursivamente hasta que pueda
resolverse los subproblemas de manera directa. Una vez que se
tienen estas respuestas, se juntan para obtener la solución general.
4. LAS TORRES DE HANÓI
(ALGORITMOS DE HANOI)
Las torres de Hanói es un algoritmo matemático que tiene sus orígenes en
un juego de tres torres con discos de distintos tamaños el juego consiste
en mover los discos de la primera a la ultima torre en orden creciente, el
objetivo del juego es volver armar la torre con una serie de reglas.
En la computación el algoritmo de Hanói trata de resolver problemas
mediante la programación dinámica o de recursividad, dividiendo los
problemas recursivamente hasta llegar a un único subproblema o hasta
obtener una solución compleja.
5. HISTORIA
Se cuenta que un templo de Benarés (Uttar Pradesh, India), se
encontraba una cúpula que señalaba el centro del mundo. Allí estaba una
bandeja sobre la cual existían tres agujas de diamante. En una mañana
lluviosa, un rey mandó a poner 64 discos de oro, siendo ordenados por
tamaño: el mayor en la base de la bandeja y el menor arriba de todos los
discos.
Tras la colocación, los sacerdotes del templo intentaron mover los discos
entre las agujas, según las leyes que se les habían entregado: "El
sacerdote de turno no debe mover más de un disco a la vez, y no puede
situar un disco de mayor diámetro encima de otro de menor diámetro".
Hoy no existe tal templo, pero el juego aún perduró en el tiempo..
6. La búsqueda binaria, un algoritmo de divide y vencerás, tiene una larga
historia. La idea de usar una lista ordenada de objetos para facilitar su
búsqueda data de la antigua Babilonia en el 200 a. C., mientras que una
descripción del algoritmo en ordenadores apareció en 1946 en un artículo de
John Mauchly. Otro algoritmo de “divide y vencerás” con un único
subproblema es el algoritmo de Euclides para computar el máximo común
divisor de dos números (mediante reducción de números a problemas
equivalentes cada vez más pequeños), que data de muchos siglos antes de
Cristo.
Un ejemplo antiguo de algoritmo de “divide y vencerás” con múltiples
subproblemas es la descripción realizada por Gauss en 1805 de lo que se le
llama ahora algoritmo de la rápida transformación de Fourier Cooley-Tukey
(FFT), aunque él no analizó su conjunto de operaciones cuantitativamente y
los FFT no se difundieron hasta que se redescubrieron casi un siglo después.
Otro problema antiguo de 2 subdivisiones de “divide y vencerás” que fue
específicamente desarrollado para ordenadores y analizado adecuadamente es
el algoritmo de merge-sort, inventado por John von Neumann en 1945.
7. ALGORITMO DIVIDE Y
VENCERÁS
En las ciencias de la computación, el término divide y vencerás (DYV) hace
referencia a uno de los más importantes paradigmas de diseño algorítmico.
El método está basado en la resolución recursiva de un problema
dividiéndolo en dos o más subproblemas de igual tipo o similar.
El proceso continúa hasta que éstos llegan a ser lo suficientemente
sencillos como para que se resuelvan directamente. Al final, las soluciones a
cada uno de los subproblemas se combinan para dar una solución al
problema original.
8. D I S E Ñ O E I M P L E M E N TA C I Ó N
La resolución de un problema mediante esta técnica consta
fundamentalmente de los siguientes pasos:
1. Ha de plantearse el problema de forma que pueda ser descompuesto en subproblemas
del mismo tipo, pero de menor tamaño. Es decir, si el tamaño de la entrada es n, hemos
de conseguir dividir el problema en k subproblemas (donde 1 ≤ k ≤ n), cada uno con una
entrada de tamaño nk y donde 0 ≤ nk < n. A esta tarea se le conoce como división.
2. En segundo lugar han de resolverse independientemente todos los subproblemas, bien
directamente si son elementales o bien de forma recursiva. El hecho de que el tamaño de
los subproblemas sea estrictamente menor que el tamaño original del problema nos
garantiza la convergencia hacia los casos elementales, también denominados casos base.
3. Por último, combinar las soluciones obtenidas en el paso anterior para construir la
solución del problema original.
9. EL PROBLEMA MATEMÁTICAMENTE
La ficha número n (siendo 1 la más pequeña) se mueve por primera
vez en el paso número 2^(n-1), y después de ese primer movimiento,
se moverá cada 2^n movimientos. De este modo, la ficha 1, se mueve
en 1, 3, 5, 7, 9... etc. La ficha 3, se mueve en 4, 12, 20, 28, 36... etc.
Y el número de veces que se mueve cada ficha es de 2^(n-k),siendo n
el número de fichas y k igual a 1 para la ficha más pequeña.
El número de movimientos mínimo a realizar para resolver el
problema es de (2^n)-1, siendo n el número de fichas.
10. Todas las fichas impares (siendo 1 la más pequeña) se mueven
siguiendo el mismo patrón. Asimismo, todas las fichas pares se
mueven siguiendo el patrón inverso a las impares. Por ejemplo: si
queremos mover un número impar de piezas desde la columna 1
hasta la 3, sucederá lo siguiente:
• Todas las fichas impares seguirán este patrón de movimiento: 1 -
> 3 -> 2 -> 1 -> 3 -> 2 -> 1 -> 3 -> 2 -> 1.
• Todas las fichas pares seguirán este patrón de movimiento: 1 ->
2 -> 3 -> 1 -> 2 -> 3 -> 1 -> 2 -> 3
11. Estos patrones dependen únicamente del número de piezas. Si el
número de piezas es par, los patrones de las impares serán los de las
pares, y viceversa.
Uniendo la primera regla con la segunda, sabemos siempre qué
pieza hay que mover y a qué columna hay que desplazarla, luego el
problema está resuelto.
12. CONCLUSIÓN
El Algoritmo de Hanói y el método divide y vencerás es un gran ejemplo de como
aplicando la lógica y la matemática pueden ser resueltos grandes problemas
haciéndolos cada vez mas pequeños para así obtener una solución efectiva.
Los programadores pueden utilizar este modelo algorítmico como una herramienta
potente para solucionar problemas complejos, tales como el clásico juego de las torres
de Hanói. Todo lo que necesita este algoritmo es dividir el problema en subproblemas
más sencillos, y éstos en otros más sencillos hasta llegar a unos subproblemas fáciles
(también llamados casos base).
Una vez ahí, se resuelven y se combinan los subproblemas en orden inverso a su inicio.
Cómo dividir los problemas es, a menudo, la parte más compleja del algoritmo. Por
eso, en muchos problemas, el modelo sólo ofrece la solución más sencilla, no la mejor.
13. JUEGO TORRES DE HANOI
http://www.jugarconjuegos.com/ESTRATEGIA/JUEGO%20TORRE%20DE%20HANOI.htm