Ejercicios tema 2

Anuncio
EJERCICIOS DE ALGORÍTMICA Y COMPLEJIDAD
COMPLEJIDAD
Ejercicio 1.
Indicar, en función de N, la cota superior de complejidad (O-grande) para el procedimiento
“Prueba” que aparece en cada caso.
1)
procedure Prueba (N : natural) is
begin
if N > 10 then
x := 2 * N;
else
for i in 1..N loop
x := 2 * N;
end loop;
end if;
end Prueba;
3)
procedure Prueba (N : natural) is
begin
if N > 10 then
for i in 1..N loop
x := 2 * N;
end loop;
else
for i in 1..N-1 loop
for j in 1..N loop
x := 2 * N;
end loop;
end loop;
end if;
end Prueba;
5)
procedure Prueba (N : natural) is
begin
x := 0;
loop
x := x + N;
exit when x > 100;
end loop;
end Prueba;
7)
procedure Prueba (N : natural) is
begin
x := 0;
loop
x := 1 + (2 * x);
exit when x > N;
end loop;
end Prueba;
2)
procedure Prueba (N : natural) is
begin
if N > 10 then
x := 2 * N;
else
for i in 1..N-1 loop
for j in 1..N loop
x := 2 * N;
end loop;
end loop;
end if;
end Prueba;
4)
procedure Prueba (N : natural) is
begin
for i in 1..n loop
for j in 1..i loop
x := 2 * N;
end loop;
end loop;
end Prueba;
6)
procedure Prueba (N : natural) is
begin
x := 0;
loop
x := x + (2 * N);
exit when x > 100;
end loop;
end Prueba;
8)
procedure Prueba (N : natural) is
A : array (1..100) of integer;
begin
x := N;
for i in A'range loop
A(i) := N + x;
x := x + 1;
end loop;
end Prueba;
9)
procedure Prueba (N : natural) is
procedure vueltas is
begin
for i in 1..N loop
for j in 1..N loop
x := x + 1;
end loop;
end loop;
end vueltas;
begin
x := 1;
if n > 10 then
vueltas;
else
for i in 1..N loop
vueltas;
end loop;
end if;
end Prueba;
10)
procedure Prueba (N : natural) is
procedure vueltas is
begin
for i in 1..N loop
for j in 1..N loop
x := x + 1;
end loop;
end loop;
end vueltas;
begin
x := 1;
if n < 10 then
vueltas;
else
for i in 1..N loop
vueltas;
end loop;
end if;
end Prueba;
Ejercicio 2.
Calcular la cota superior de complejidad y el tiempo de ejecución de un algoritmo que
halle el factorial de N de forma recursiva.
Ejercicio 3.
En 1883 el matemático francés Édouard Lucas comercializó un juego al que llamó "La
torre de Hanoi" y que posteriormente sería más conocido por su nombre en plural. Con el
fin de hacer más atractivo el juego, lo acompañó de la siguiente leyenda:
“En el gran templo de Benarés, debajo de la cúpula que marca el centro del mundo, yace una base de bronce, en donde
se encuentran acomodadas 3 agujas de diamante, cada una del grueso del cuerpo de una abeja y
de una altura de 50 cm aproximadamente. En una de estas agujas, Dios, en el momento de la
creación, colocó 64 discos de oro, el mayor sobre el plato de bronce y el resto, de menor tamaño,
conforme se llega a la cima. Día y noche, incesantemente, los sacerdotes del templo mueven los
discos de una aguja a otra de acuerdo con las leyes impuestas e inmutables de Brahma, que
requieren que los sacerdotes se encuentren todo el tiempo laborando, no muevan más de un
disco a la vez y que deben colocar el disco en alguna de las agujas de modo que no cubra a un
disco de radio menor. Cuando los 64 discos hayan sido transferidos de la aguja en la que Dios
colocó los discos, en el momento de la creación, a la otra aguja, el templo y los brahmanes se
convertirán en polvo y junto con ellos el mundo desaparecerá.”
Si la leyenda fuera cierta y suponiendo que los sacerdotes son capaces de mover un
disco cada segundo sin equivocarse, ¿merecería la pena seguir estudiando la asignatura
o haríamos mejor en prepararnos para el fin del mundo?
Nota: La edad del universo se estima en unos 14000 millones de años.
Ejercicio 4.
Responder a las cuestiones siguientes sobre el algoritmo que aparece a continuación.
type Vector is array (1..10) of Natural;
Resultado : Vector;
procedure prueba (n : Natural; A : out Vector) is
m : Natural := 1;
begin
(1)
for k in A'Range loop
A(k) := 0;
end loop;
(2)
for i in 1..n-1 loop ---- tiempo de ejecución = 3
for j in i+1..n loop
---- tiempo de ejecución = 3
m := m + 1; ---- tiempo de ejecución = 2
end loop;
end loop;
A (m mod 10) := 1;
end prueba;
1) Indica el orden de complejidad del bucle (1).
2) Calcular el tiempo de ejecución del bucle (2) en función de n.
3) Indica las tres cotas (Ο, Θ, Ω) del apartado anterior.
4) Indica la complejidad del bucle siguiente en función de n:
k := 1;
while k <= n loop
prueba (k, Resultado);
k := k*2;
end loop;
-- Llamada al procedimiento anterior
Descargar