Professional Documents
Culture Documents
1
Francisco Lara
Fecha de Entrega: Da de la Primera Prueba
Recuerde que log n significa en esta clase, logaritmo en base 2.
1. Analizar los siguiente algoritmos (indicando el n
umero de pasos que toma
cada uno de ellos como una funcion f (n)):
(a) void ej1(int n)
{
int a;
for(int i = 0; i < n; i+=2)
{
a = i;
}
}
(b) void ej2(int n)
{
int a;
for(int i = 0; i < n * n; i++)
{
for(int j = 0; j < i; j++)
{
a = i;
}
}
}
2. Probar que 3n3 + 2n2 log n = (n3 ).
3. El algoritmo A usa 2n log n operaciones, mientras que el algoritmo B usa
n2 operaciones. Para que valores de n, A es mas rapido que B? Para
que valores de n, B es mas rapido que A?
4. Probar que si g(n) = (logb f (n), entonces g(n) = (log f (n)).
5. Probar que 2n = O(n!).
6. (a) Usar la
afica de f (x) = 1/x para probar que
n
X
1
i=2
< loge n.
(b) Usar la
afica de f (x) = 1/x para probar que
loge n <
n
X
1
i=1
= (log n).
7. Cu
al de las siguientes afirmaciones son verdaderas o falsas. Probar o dar
contrajemplo. (f y g son funciones reales, g(n) 6= 0.)
(a) Si limn
O(g(n)).
f (n)
g(n)
existe y es igual a un n
umero real L, entonces f (n) =
f (n)
g(n)
f (n)
g(n)
existe y es igual a un
existe y es igual a un n
umero real L, entonces f (n) =
f (n)
g(n)
existe y es igual a un n
umero
13. La funci
on factorial se define como n! = n(n 1)!, si n > 0 y 0! =
1. Escribir una funci
on recursiva para la funcion factorial (en C++) y
estudiar su complejidad.
14. En clase estudiamos la funcion de Fibonacci y su complejidad como funcion
recursiva. Escribir ahora una funcion iterativa (esto es usando un loop)
en C++ y analizar su complejidad.
15. El algoritmo de Euclides (300 A.C.) para calcular el maximo com
un divisor
(mcd) dice:
Para calcular el m
aximo com
un divisor entre dos n
umeros m y n, m > n
proceder de la siguiente manera. Sustraer repetidamente el menor del
mayor hasta que la diferencia d sea menor que n. Luego, hacer lo mismo
que antes pero con d en lugar de n y con n en lugar de m. (Note que
en este momento m y n se han actualizado.) Continuar hasta que los dos
n
umeros m y n sean iguales. El resultado m es el maximo com
un divisor
de los dos n
umeros originales.
2
15
-1.5
-10
q
17. Implementar una pila ligada de doubles y utlizarla para correr la misma
calculadora del ejercicio anterior.
18. Implementar una cola ligada con template. En un archivo conductor de pila.cpp,
utilizar el siguiente programa como test. No preocuparse por ahora de errores generados por cola vaca.
#include "Cola.h"
#include <iostream>
using namespace std;
template<class T>
void proceso_cola(Cola<T>& cola, T valor1, T valor2, T valor3)
{
cout << "numero de objectos es "<< cola.obtener_longitud() << "\n";
cola.hace_cola(valor1);
cout << "numero de objectos es "<< cola.obtener_longitud() << "\n";
cola.hace_cola(valor2);
cout << "numero de objectos es "<< cola.obtener_longitud() << "\n";
cola.hace_cola(valor3);
cout << "numero de objectos es "<< cola.obtener_longitud() << "\n";
cout << "\n";
cout << "Primero en la cola es " << cola.el_primero();
cout << "\n";
cout << "numero de objectos es "<< cola.obtener_longitud() << "\n";
cout << "\n";
cout << "Primero en la cola es " << cola.es_atendido() << "\n";
cout << "numero de objectos es " << cola.obtener_longitud() << "\n";
cout << "Primero en la cola es " << cola.es_atendido() << "\n";
cout << "numero de objectos es "<< cola.obtener_longitud() << "\n";
cout << "Primero en la cola es " << cola.es_atendido() << "\n";
cout << "numero de objectos es "<< cola.obtener_longitud() << "\n";
cout << "\n";
}
int main()
{
Cola<string> cola1(100);
string s1 = "Jorge";
string s2 = "Ana";
string s3 = "Esteban";
proceso_cola(cola1, s1, s2, s3);
4
Cola<int> cola2(100);
proceso_cola(cola2, 1, 2, 3);
return 1;
}
El output debe ser:
numero
numero
numero
numero
de
de
de
de
objectos
objectos
objectos
objectos
es
es
es
es
0
1
2
3
es
es
es
es
es
es
Jorge
2
Ana
1
Esteban
0
numero
numero
numero
numero
es
es
es
es
0
1
2
3
de
de
de
de
objectos
objectos
objectos
objectos
Primero en la cola es 1
numero de objectos es 3
Primero en la cola
numero de objectos
Primero en la cola
numero de objectos
Primero en la cola
numero de objectos
es
es
es
es
es
es
1
2
2
1
3
0
Las partes que requieren programacion, compilarlas y correrlas. Una vez que
compilen y corran correctamente, escribirlas a mano. Entregar todos los ejercicios a mano. No imprimir programas. No es necesario entregar los programas
electr
onicamente, pero guardarlos en un lugar seguro para una posible revision.
Es permitido colaborar para estudio, pero no es permitido entregar el codigo
hecho por otros.
No entregar ejercicios que no compilen.
No entregar ejercicios que no corran correctamente de acuerdo a las especificaciones.
5