Beruflich Dokumente
Kultur Dokumente
Prctica 1
Eficiencia y Complejidad
Ejercicio 1
Sean dos algoritmos alg1 y alg2 que realizan la misma de tarea de calcular el promedio de edad de un grupo de personas que solicit el
pasaporte en el ao 2015. Cada uno de estos algoritmos est codificado de forma diferente, por lo cual, el tiempo de ejecucin para el
peor caso de alg1 es T1 (n) = 10.000n mientras que el de alg2 es T2(n) =n2.
Con que cantidad de personas alg1 es mejor que alg2? Y a la inversa? Fundamente su respuesta.
Ejercicio 2
Dadas las siguientes funciones ordenarlas segn sus velocidades de crecimiento.
a. T1(n) = n*log2(n)
b. T2(n)= (1/3)n
c. T3(n) =2n+n2
d. T4(n) = (3/2)n
e. T5(n) = (log2(n))2
f. T6(n) = log2(n)
g. T7(n) = n+log2(n)
h. T8(n) = n1/2
i. T9(n) = 3n
Para poder ordenarlas, utilice el graficador de funciones que se encuentra en http://fooplot.com/.
Dado que el graficador solo trabaja con logaritmos en base 10 (log o log10) utilice el cambio de base para convertir los logaritmos (tal
como se explica en: http://es.wikipedia.org/wiki/Logaritmo#Cambio_de_base). Bsicamente:
Log b x
Log a x a 1, b 1
Log b a
Ejercicio 3
Determinar si las siguientes sentencias son verdaderas o falsas, justificando la respuesta.
a. 3n es de O(2 n)
b. n/log2(n) es de O(log2(n))
c. n 1/2 + 10 20 es de O (n 1/2)
d. n+ log2 (n) es de O(n)
e. Si p(n) es un polinomio de grado k, entonces p(n) es O(nk). Pista: Si p(n)=ak nk + ... + a1n + a0, utilizar como constante a M =
|ak| + ... + |a1| + |a0|
3n 17, n 100
f. tiene orden lineal
317, n 100
n 2 , n 100
g. tiene orden cuadrtico
n, n 100
h. 2 n+1 es de O (2 n)
i. 2 2n es de O (2 n)
Ejercicio 4
Se necesita generar una permutacin random de los n primeros nmeros enteros. Por ejemplo [4,3,1,0,2] es una permutacin legal,
pero [0,4,1,2,4] no lo es, porque un nmero est duplicado (el 4) y otro no est (el 3). Presentamos tres algoritmos para solucionar este
problema. Asumimos la existencia de un generador de nmeros random, ran_int (i,j) el cual genera en tiempo constante, enteros entre i
y j inclusive con igual probabilidad. Tambin suponemos el mensaje swap () que intercambia dos datos entre si. Si bien los tres
1
Complejidad Temporal, Estructuras de Datos y Algoritmos
algoritmos generan permutaciones random legales, tenga presente que por la forma en que utilizan la funcion ran_int algunos de ellos
podran no terminar nunca, mientras otro s.
public class Ejercicio4 {
private static Random rand = new Random();
2
Complejidad Temporal, Estructuras de Datos y Algoritmos
Ejercicio 5
Para cada uno de los algoritmos presentados:
a. Expresar en funcin de n el tiempo de ejecucin
b. Establecer el orden de dicha funcin usando notacin big-Oh.
En el caso de ser necesario tenga presente que:
n
n n 1 6n 3
9n 2 n 1
i4
i 1 30
n
2 n n 1 2n 1
i
i 1
6
1.
public static void uno (int n) {
int i, j, k ;
int [] [] a, b, c;
a = new int [n] [n];
b = new int [n] [n];
c = new int [n] [n];
for ( i=1; i<=n-1; i++) {
for ( j=i+1; j<=n; j++) {
for ( k=1; k<=j; k++) {
c[i][j] = c[i][j]+ a[i][j]*b[i][j];
}
}
}
}
2.
public static void dos (int n){
int i, j, k, sum;
sum = 0;
for ( i=1; i<=n; i++) {
for ( j=1; j <= i*i; j++) {
for ( k=1; k<= j; k++) {
sum = sum + 1;
}
}
}
}
Ejercicio 6
Para cada uno de los algoritmos presentados calcule el T(n).
1. 2.
int c = 1; int c = n;
while ( c < n ) { while ( c > 1 ) {
algo_de_O(1); algo_de_O(1);
c = 2 * c; c = c / 2;
} }
3.
int x=1;
for (int i = 1; i < n; i = i+4)
for (int j = n; j > 1; j = |j/4|)
for (int k = 1; k < n; k = k*2)
x = x+1;
3
Complejidad Temporal, Estructuras de Datos y Algoritmos
Ejercicio 7
Considere la siguiente especificacin de operaciones de una lista y su recorredor:
Clase Recorredor:
comenzar () #Se prepara para recorrer los elementos de la lista.
elemento () #Retorna el elemento actual.
proximo () #Avanza al prximo elemento de la lista.
fin() # Determina si lleg o no al final de la lista.
agregar(elem) #Agrega el elemento en la posicin actual.
eliminar() #Elimina el elemento actual.
a. Implemente (pase por mquina) una clase abstracta llamada Lista y Recorredor de acuerdo a la especificacin dada.
4
Complejidad Temporal, Estructuras de Datos y Algoritmos
b. Escriba una clase llamada ListaConArreglo como subclase de Lista, de manera que implemente todos los mtodos
definidos en la superclase haciendo uso de arreglos.
c. Escriba una clase llamada ListaEnlazada como otra subclase de Lista, de manera que implemente todos los mtodos
definidos en la superclase pero haciendo uso de una estructura recursiva. En este caso la lista tendr una referencia al
elemento inicial. Luego, se definir otra clase recursiva que contenga el elemento y que referencie a una instancia similar a s
misma.
d. Es posible implementar el mtodo incluye en la clase Lista de manera que solo utilice otras operaciones de lista y no
dependa de la estructura interna elegida en las subclases? Si fuera posible, funcionaria el envo de este mensaje a un objeto
de tipo ListaEnlazada?
Ejercicio 8
Sea la siguiente especificacin de una pila:
Ejercicio 9
Sea la siguiente especificacin de una cola: