Tarea 2 de Diseño de Algoritmos
Trimestre 2010 Primavera
Entrega: 21 de mayo de 2010 a las 22:00.
Problema
1: Diseña un algoritmo usando la técnica de divide y
vencerás para resolver el problema de las torres de Hanoi
con la
restricción adicional de que no se permite mover ningún
disco entre las agujas 1 y 3, es decir, todos los movimientos deben ser
desde o hacia la aguja 2. Escribe un programa llamado hanoiZZ (donde ZZ es una clave de
dos
dígitos asignada por el profesor) basado en tu algoritmo
que acepte como entrada un entero positivo N (con 1 <= N <= 20) y
que escriba como salida
una lista de movimientos que muevan los N discos de la aguja 1 a la
aguja 3. La lista debe contener dos enteros en cada renglón: 0 0
para indicar que terminó, mientras que A B significa que se
movió un disco de la aguja A a la aguja B. Por ejemplo, si N = 1
una posible salida contiene los tres renglones 1 2, 2 3 y 0 0.
Ejemplo de
entrada
|
Ejemplo de
salida
|
1 |
1 2
2 3
0 0
|
Problema 2: Sea N un entero
positivo y sea A1, A2, ..., AN un
vector de N enteros positivos distintos. Diremos que dos índices
I y J forman una inversión
si I < J pero AI > AJ. Diseña un
algoritmo de divide y vencerás
que calcule la cantidad de inversiones en el vector A. Por ejemplo, si
N = 5 y A = (2, 4, 1, 3, 5) entonces se tienen tres inversiones: I = 1
y J = 3 porque A1 > A3, I = 2 y J = 3 porque A2
> A3 e I = 2 y J = 4 porque A2 > A4.
Escribe
un
programa llamado inversZZ
(donde ZZ es una clave de
dos
dígitos asignada por el profesor) que implemente tu
algoritmo. La entrada a tu programa será un entero N seguido de
los N
enteros A1, A2, ..., AN (con 1 <= N
<= 1,000,000 y 1 <= AI <= 1,000,000,000) y la
salida de tu programa será un entero R (la cantidad de
inversiones). Idea: Trata de
modificar el algoritmo de ordenamiento por mezcla. En particular
observa que si has dividido la lista en dos mitades ordenadas, entonces
el número total de inversiones son las que había en cada
mitad mas las que se forman con un elemento de cada una de las mitades.
Ejemplo de
entrada |
Ejemplo de
salida |
5
2 4 1 3 5
|
3
|
Notas: Tus programas no deben
leer ni escribir nada adicional a lo que se indica en el enunciado. El
tiempo de ejecución de sus algoritmos será considerado
como parte de la evaluación.