universidad técnica federico santa maría

Anuncio
EX UMBRA
IN
SOLEM
UNIVERSIDAD TÉCNICA FEDERICO SANTA MARÍA
DEPARTAMENTO DE INFORMÁTICA
Nombre:
Estructura de Datos: Primer Certamen
Segundo Semestre, 2010
1.- (25 ptos.) Calcule la complejidad de los siguientes segmentos de algoritmos:
a) i=1;
while (i<n)
if ( Comprueba(i) ) i++;
// Comprueba(i) = O(n);
else
i*=2
b) long calcula(long numero)
if(numero<1) return(1);
else return( (5*calcula(numero-3)) – (2*calcula(numero-1)) + calcula(numero-2));
c) for(i=1;i<n;i*3)
for(j=n;j>1;j/2) printf(“%d,%d”,i,j);
Respuesta:
a) O(n2)
b) O(3n)
c) O(log2n*log3n)
2.- (25 ptos) Se dispone de dos algoritmos según la siguiente tabla:
Complejidad espacial
Complejidad Temporal
Algoritmo1
10n bytes
200n ciclos
Algoritmo2
500n bytes
50n ciclos
Estos algoritmos se prueban en 2 supercomputadores:
Capacidad de memoria Duración de ciclo
Supercomputador1 20.000 bytes
10 milisegundos
Supercomputador2 50.000 bytes
50 milisegundos
Disponibilidad
30 segundos
100 segundos
a) Cuantos n alcanza a calcular cada algoritmo con cada uno de estos supercomputadores?
b) Si se dispone de almacenamiento infinito, cuantos n alcanza esta vez el algoritmo 2 a calcular en
ambas máquinas?
c) En ese caso, cuánto espacio utilizaría en total en cada máquina?
Respuesta:
Supercomputador1
Supercomputador2
Algoritmo1
15
10
Supercomputador1
Supercomputador2
Algoritmo2
60
40
a)
b)
b)
Supercomputador1
Supercomputador2
Algoritmo2
30.000
20.000
Algoritmo2
40
40
UNIVERSIDAD TÉCNICA FEDERICO SANTA MARÍA
DEPARTAMENTO DE INFORMÁTICA
EX UMBRA
IN
SOLEM
3.- (25 ptos.) Una empresa de trenes necesita un programa que arme automáticamente los trenes para cierta
cantidad de pasajeros. Se cuenta con una pila de locomotoras, una pila de vagones de carbón y una pila con
vagones de pasajeros con una capacidad para 10 pasajeros cada uno. La empresa le suministra un arreglo con
la cantidad de pasajeros que se subirán a cada tren y un arreglo de pilas donde se deben dejar los trenes listos
para salir y con la capacidad necesaria para transportar a los pasajeros. Las locomotoras y vagones pueden
estar listos para el servicio o en mal estado. Los en mal estado deben ser enviados a la pila para enviar al
taller.
Struct vagon{
Int estado;
// 1: Disponible , 0: Mal estado
};
Int pasajeros[20];
TPila trenes[20];
TPila locomotoras;
TPila vagones_carbon;
TPila vagones_pasajeros;
TPila Taller;
Escriba una función en pseudo-código para procesar el arreglo y generar las pilas de trenes según se requiera.
Recuerde enviar los vagones en mal estado al taller y dejar los trenes listos para salir (primer vagón en salir
locomotora). Considere las pilas como dinámicas e infinitas.
Respuesta:
Void ordena(void){
Int Encontrado;
Struct vagon temp;
Int i,j;
For(j=0;j<20;j++){
For(i=0;i<(pasajeros[j]/10+((pasajeros[j]%10)?1,0));i++){
Encontrado=0;
While(!Encontrado){
Pop(vagones_pasajeros,temp);
If(temp.estado){
Encontrado=1;
Push(trenes[i],temp);
}else
Push(Taller,temp);
}
}
Encontrado=0;
While(!Encontrado){
Pop(vagones_carbon,temp);
If(temp.estado){
Encontrado=1;
Push(trenes[i],temp);
}else
Push(Taller,temp);
}
Encontrado=0;
While(!Encontrado){
Pop(locomotoras,temp);
If(temp.estado){
Encontrado=1;
Push(trenes[i],temp);
}else
Push(Taller,temp);
}
}
}
UNIVERSIDAD TÉCNICA FEDERICO SANTA MARÍA
DEPARTAMENTO DE INFORMÁTICA
EX UMBRA
IN
SOLEM
4.- (25 ptos.) Se tiene la siguiente declaración de estructura:
struct disco
struct nodoLD {
int info;
struct nodoLD *sig, *ant;
};
struct nodoLD * ld ;
a) Implemente la operación de InsertarLD(nodoLD *ld, int x) en una lista ordenada.
b) Que pasa si la lista está desordenada
c) Haga un análisis de la complejidad en ambos casos (a y b).
Respuesta:
a)
Void InsertarLD(nodo *ld, int x){
nodoLD p,nodo;
nodo=(nodoLD*)malloc(sizeof(nodoLD));
nodo->info=x;
nodo->sig=nodo->ant=NULL
p=*ld;
if (p==NULL){
*ld=nodo;
return;
}
if (p->info<=x){
while((p->sig!=NULL)&&(p->sig->info<=x)){
p=p->sig;
}
if (p->sig==NULL){
p->sig=nodo;
nodo->ant=p;
return;
}
p->sig->ant=nodo;
nodo->sig=p->sig;
p->sig=nodo;
nodo->ant=p;
return;
}
while((p->ant!=NULL)&&(p->ant->info>x)){
p=p->ant;
}
if (p->ant==NULL){
p->ant=nodo;
nodo->sig=p;
return;
}
p->ant->sig=nodo;
nodo->ant=p->ant;
p->ant=nodo;
nodo->sig=p;
}
UNIVERSIDAD TÉCNICA FEDERICO SANTA MARÍA
DEPARTAMENTO DE INFORMÁTICA
EX UMBRA
IN
SOLEM
b)
Void InsertarLD(nodo *ld, int x){
nodoLD p,nodo;
nodo=(nodoLD*)malloc(sizeof(nodoLD));
nodo->info=x;
nodo->sig=nodo->ant=NULL
p=*ld;
if (p==NULL){
*ld=nodo;
return;
}
if (p->sig==NULL){
nodo->ant=p;
p->sig=nodo;
return;
}
nodo->ant=p;
nodo->sig=p->sig;
p->sig->ant=nodo;
p->sig=nodo;
}
c)
A=O(n)
B=O(1) u O(n) dependiendo de la implementación
Descargar