You are on page 1of 8

UNIVERSIDAD NACIONAL DE SAN AGUSTIN ESCUELA PROF.

INGENIERIA DE SISTEMAS
Examen 1 de Estructura de Datos y Algoritmos

Nombre: _____________________________________________ Fila:_A_ Fecha: __________ Nota: _____________

1. Considere la clase abstracta Par y la Clase Fraccin. Implemente un mtodo para reducir una fraccin a una
irreductible. Por ejemplo 77/231 se reducira a 1/3.


2. Se desea definir un tipo de listas enlazadas que permita almacenar elementos heterogneos, por ejemplo,
enteros y strings. a) Defina una clase abstracta Nodolista y dos clases derivadas que permitan implementar este
tipo de listas. Sus definiciones deben permitir que el siguiente cdigo imprima correctamente todos los
elementos de la lista, suponiendo que c apunta al primer nodo de la lista:
for( Nodolista p=c; p != null; p=p.siguiente() ) System.out.println( p );
b) Suponga que c apunta al nodo de encabezamiento de una lista de doble enlace. Se ha descubierto que un
vndalo ha modificado todos los punteros prev en la lista. Escribe un mtodo que asigne a cada puntero prev
su valor correcto, de modo que la lista vuelva a ser vlida.


3. Analice el nmero de comparaciones que realiza el siguiente algoritmo en el peor caso. El programa se
invoca inicialmente como funcion(A, x, 0, n-1) para buscar el nmero x en el arreglo A[0..n-1], el cual se
encuentra ordenado de menor a mayor:

int funcion(int[] a, int x, int i, int j) {
if (i>j)
return -1;
if (i==j) {
if (a[i]==x)
return i;
else
return -1;
} else {
int n1=(2i+j)/3;
int n2=(i+2j)/3;
if (x<=a[n1])
j=n1-1;
else if (x>=a[n2])
i=n2+1;
else {
i=n1+1;
j=n2-1;
}
return funcion(a, x, i, j);
}
}

4. Responder Verdadero o Falso segn corresponda:
a) La complejidad en un algoritmo de recorrido de un rbol binario es lineal. .................................................... ( )
b) La mnima complejidad de un algoritmo de ordenacin es cuadrtica. ........................................................... ( )
c) La complejidad de un algoritmo para encolar un elemento en una cola de prioridad es O(1). ...................... ( )
d) La invariante del algoritmo de separacin de nros positivos y negativos parte el conjunto en 3, los positivos,
los negativos y los ceros. .......................................................................................................................................... ( )
e) La solucin recursiva del algoritmo para la serie Fibonacci tiene una complejidad O(n
2
). ............................ ( )
f) En rboles binarios, el nro de nodos externos es igual al nro de nodos internos + 2n. .................................. ( )
g) El mtodo EncontrarPrevio en una lista enlazada tiene complejidad O(k). ...................................................... ( )
h) tail recursin son las nicas recursiones que pueden transformarse a iterativas, con el uso de una pila. . ( )
i) El padre de un nodo en un rbol heap es el que est en posicin j/2 y los hijos en posiciones 2j y 2j+1. .... ( )
j) Existen 2 formas de buscar elementos en un arreglo, la secuencial de O(n) y la binaria de O(log n). ........... ( )
UNIVERSIDAD NACIONAL DE SAN AGUSTIN ESCUELA PROF. INGENIERIA DE SISTEMAS
Examen 1 de Estructura de Datos y Algoritmos

Nombre: _____________________________________________ Fila:_B_ Fecha: __________ Nota: _____________

1. Analice el nmero de comparaciones que realiza el siguiente algoritmo en el peor caso. El programa se
invoca inicialmente como funcion(A, x, 0, n-1) para buscar el nmero x en el arreglo A[0..n-1], el cual se
encuentra ordenado de menor a mayor:
int funcion(int[] a, int x, int i, int j) {
if (i>j)
return -1;
if (i==j) {
if (a[i]==x)
return i;
else
return -1;
} else {
int n1=(2i+j)/3;
int n2=(i+2j)/3;
if (x<=a[n1])
j=n1-1;
else if (x>=a[n2])
i=n2+1;
else {
i=n1+1;
j=n2-1;
}
return funcion(a, x, i, j);
}
}


2. Implemente en Java el mtodo int alturaArbol(Nodo raz), que recibe por parmetro la raz de
un rbol binario y retorna la altura de ste. La clase Nodo est definida como:
class Nodo {
Object info;
Nodo izq;
Nodo der;
}


3. Implemente en Java una pila utilizando listas enlazadas que almacene caracteres de una palabra. Luego
implemente un algoritmo de orden lineal que devuelva verdadero si la palabra formada con los caracteres es
palndrome y falso si no lo es. Para ello use solamente pilas temporales para comparar cada uno de los
valores.


4. Responder Verdadero o Falso segn corresponda:
a) La mnima complejidad de un algoritmo de bsqueda es O(log n). .................................................................. ( )
b) La complejidad de un algoritmo de bsqueda en un rbol binario es logartmica. ......................................... ( )
c) La invariante del algoritmo de ordenacin por insercin y por seleccin parten el arreglo en 2, los ordenados
y los desordenados. ................................................................................................................................................... ( )
d) La optimizacin del algoritmo recursivo de x
n
tiene una complejidad O(n log n). .......................................... ( )
e) La herencia mltiple en Java se implementa con el uso de la palabra reservada extends. ........................... ( )
f) El nro de rboles binarios distintos que se puede generar con 4 nodos internos es 14. ................................ ( )
g) El mtodo apilar en una pila, con la opcin para doblar el tamao del arreglo en caso haya overflow, tiene una
complejidad O(k). ........................................................................................................................................................ ( )
h) Una cola de prioridad tiene sus algoritmos de encolar de O(1) y de sacar O(n). ............................................ ( )
i) El algoritmo de insercin en un rbol heap implementado con arreglos tiene complejidad O(n). ................. ( )
j) Los algoritmos estaVacia del TAD lista, pila y cola tienen O(1). ........................................................................ ( )
UNIVERSIDAD NACIONAL DE SAN AGUSTIN ESCUELA PROF. INGENIERIA DE SISTEMAS
Examen 1 de Estructura de Datos y Algoritmos

Nombre: _____________________________________________ Fila:_C_ Fecha: __________ Nota: _____________

1. Considere la clase abstracta Par y la Clase Fraccin. Implemente un mtodo para reducir una fraccin a una
irreductible. Por ejemplo 77/231 se reducira a 1/3.


2. Implemente en Java una pila utilizando listas enlazadas que almacene caracteres de una palabra. Luego
implemente un algoritmo de orden lineal que devuelva verdadero si la palabra formada con los caracteres es
palndrome y falso si no lo es. Para ello solamente use pilas temporales para comparar cada uno de los
valores.


3. Tenemos una implementacin de una cola usando un arreglo, con las variables primero y ultimo apuntando al
primer y ltimo elemento respectivamente. Tenemos la variable numElem con la cantidad de elementos. En un
momento determinado se desea obtener una copia de la cola, pero que ahora el primero corresponda a la
primera posicin del arreglo. Implemente tal mtodo.


4. Responder Verdadero o Falso segn corresponda:
a) La complejidad en un algoritmo de recorrido de un rbol binario es lineal. .................................................... ( )
b) La mnima complejidad de un algoritmo de ordenacin es cuadrtica. ........................................................... ( )
c) La complejidad de un algoritmo para encolar un elemento en una cola de prioridad es O(1). ...................... ( )
d) La invariante del algoritmo de separacin de nros positivos y negativos parte el conjunto en 3, los positivos,
los negativos y los ceros. .......................................................................................................................................... ( )
e) La solucin recursiva del algoritmo para la serie Fibonacci tiene una complejidad O(n
2
). ............................ ( )
f) La mnima complejidad de un algoritmo de bsqueda es O(log n). ................................................................... ( )
g) La complejidad de un algoritmo de bsqueda en un rbol binario es logartmica. ......................................... ( )
h) La invariante del algoritmo de ordenacin por insercin y por seleccin parten el arreglo en 2, los ordenados
y los desordenados. ................................................................................................................................................... ( )
i) La optimizacin del algoritmo recursivo de x
n
tiene una complejidad O(n log n). ........................................... ( )
j) La herencia mltiple en Java se implementa con el uso de la palabra reservada extends. ............................ ( )

UNIVERSIDAD NACIONAL DE SAN AGUSTIN ESCUELA PROF. INGENIERIA DE SISTEMAS
Examen 1 de Estructura de Datos y Algoritmos

Nombre: _____________________________________________ Fila:_D_ Fecha: __________ Nota: _____________

1. Se desea definir un tipo de listas enlazadas que permita almacenar elementos heterogneos, por ejemplo,
enteros y strings. a) Defina una clase abstracta Nodolista y dos clases derivadas que permitan implementar este
tipo de listas. Sus definiciones deben permitir que el siguiente cdigo imprima correctamente todos los
elementos de la lista, suponiendo que c apunta al primer nodo de la lista:
for( Nodolista p=c; p != null; p=p.siguiente() ) System.out.println( p );
b) Suponga que c apunta al nodo de encabezamiento de una lista de doble enlace. Se ha descubierto que un
vndalo ha modificado todos los punteros prev en la lista. Escribe un mtodo que asigne a cada puntero prev
su valor correcto, de modo que la lista vuelva a ser vlida.


2. Implemente en Java el mtodo int alturaArbol(Nodo raz), que recibe por parmetro la raz de
un rbol binario y retorna la altura de ste. La clase Nodo est definida como:
class Nodo {
Object info;
Nodo izq;
Nodo der;
}


3. Tenemos una implementacin de una cola usando un arreglo, con las variables primero y ultimo apuntando al
primer y ltimo elemento respectivamente. Tenemos la variable numElem con la cantidad de elementos. En un
momento determinado se desea obtener una copia de la cola, pero que ahora el primero corresponda a la
primera posicin del arreglo. Implemente tal mtodo.


4. Responder Verdadero o Falso segn corresponda:
a) En rboles binarios, el nro de nodos externos es igual al nro de nodos internos + 2n. ................................. ( )
b) El mtodo EncontrarPrevio en una lista enlazada tiene complejidad O(k). ...................................................... ( )
c) tail recursin son las nicas recursiones que pueden transformarse a iterativas, con el uso de una pila. . ( )
d) El padre de un nodo en un rbol heap es el que est en posicin j/2 y los hijos en posiciones 2j y 2j+1. ... ( )
e) Existen 2 formas de buscar elementos en un arreglo, la secuencial de O(n) y la binaria de O(log n). .......... ( )
f) El nro de rboles binarios distintos que se puede generar con 4 nodos internos es 14. ................................ ( )
g) El mtodo apilar en una pila, con la opcin para doblar el tamao del arreglo en caso haya overflow, tiene una
complejidad O(k). ........................................................................................................................................................ ( )
h) Una cola de prioridad tiene sus algoritmos de encolar de O(1) y de sacar O(n). ............................................ ( )
i) El algoritmo de insercin en un rbol heap implementado con arreglos tiene complejidad O(n). ................. ( )
j) Los algoritmos estaVacia del TAD lista, pila y cola tienen O(1). ........................................................................ ( )

UNIVERSIDAD NACIONAL DE SAN AGUSTIN ESCUELA PROF. INGENIERIA DE SISTEMAS
Examen 1 de Estructura de Datos y Algoritmos

Nombre: ____________________________________________________ Fecha: __________ Nota: _____________

1. Considere la clase abstracta Par y la Clase Fraccin. Implemente un mtodo para reducir una fraccin a una
irreductible. Por ejemplo 77/231 se reducira a 1/3.

abstract class Par {
protected int a, b;
public Par(int x,int y){ a=x; b=y; }
public int primero(){ return a; }
public int segundo(){ return b; }
public void primero(int x){ a=x; }
public void segundo(int x){ b=x; }
abstract public String toString();
}

class Fraccion extends Par{
public Fraccion(int x,int y){ super(x,y); }
public Fraccion suma(Fraccion x){ return new Fraccion(a*x.b+b*x.a,b*x.b);}
public Fraccion reduce() {
//calcular los nros primos y ver si a y b %primo==0
int menor = (a<b ? a: b);
for(int i=2;i<=menor;) {
if(a%i==0 && b%i==0) {
a/=i; b/=i;
menor = (a<b ? a: b);
}
else
i=sigprimo(i);
}
return new Fraccion(a,b);
}
public String toString(){ return a+"/"+b; }
public int sigprimo(int i) {
while(true) {
i++; int j=2;
while(i%j!=0) j++;
if (i==j)
return i;
}
}
}

public class DemoFraccion {
public static void main(String[]args) {
// TODO Auto-generated method stub
Fraccion f1 = new Fraccion(77,231);
System.out.println("La fraccion 77/231 reducida es "+ f1.reduce().toString());
}
}

2. Se desea definir un tipo de listas enlazadas que permita almacenar elementos heterogneos, por ejemplo,
enteros y strings. a) Defina una clase abstracta Nodolista y dos clases derivadas que permitan implementar este
tipo de listas. Sus definiciones deben permitir que el siguiente cdigo imprima correctamente todos los
elementos de la lista, suponiendo que c apunta al primer nodo de la lista:
for( Nodolista p=c; p != null; p=p.siguiente() ) System.out.println( p );
b) Suponga que c apunta al nodo de encabezamiento de una lista de doble enlace. Se ha descubierto que un
vndalo ha modificado todos los punteros prev en la lista. Escribe un mtodo que asigne a cada puntero prev
su valor correcto, de modo que la lista vuelva a ser vlida.

public abstract class Nodolista {
protected Nodolista sig;
protected Nodolista prev;
public abstract String toString();
Nodolista siguiente() {
return sig;
}
Nodolista anterior() {
return prev;
}
}

public class NodoLEString extends Nodolista{
private String elem;
public NodoLEString(String i, Nodolista s) {
elem = i;
this.sig = s;
}
public String toString() {
return elem;
}
}

public class NodoLEentero extends Nodolista{
private int elem;
public NodoLEentero(int i, Nodolista s) {
elem = i;
this.sig = s;
}
public String toString() {
return ""+elem;
}
}

public class Lista {
Nodolista c;
Lista() {
c = new NodoLEString(null, null);
}
void recorrer() {
for (Nodolista p=c; p!=null; p=p.siguiente())
System.out.println(p);
}
void insertar(String i, int pos) {
Nodolista antes = c;
while(pos>0 && antes.siguiente()!=null) {
antes = antes.siguiente();
pos--;
}
NodoLEString nodo = new NodoLEString(i,antes.sig);
antes.sig = nodo;
}
void insertar(int i, int pos) {
Nodolista antes = c;
while(pos>0 && antes.siguiente()!=null) {
antes = antes.siguiente();
pos--;
}
NodoLEentero nodo = new NodoLEentero(i,antes.sig);
antes.sig = nodo;
}
void arreglarPrev() {
Nodolista antes = c;
Nodolista despues = c.siguiente();
antes.prev = null;
while (despues!=null) {
despues.prev = antes;
antes = despues;
despues = despues.siguiente();
}
}
}

public class DemoLista {
public static void main(String[] args) {
// TODO Auto-generated method stub
Lista l = new Lista();
l.insertar(1, 1);
l.insertar("dos", 2);
l.insertar("uno,cinco",1);
l.insertar("cuatro",3);
l.insertar(3,3);
l.recorrer();
l.arreglarPrev();
}
}

3. Analice el nmero de comparaciones que realiza el siguiente algoritmo en el peor caso. El programa se
invoca inicialmente como funcion(A, x, 0, n-1) para buscar el nmero x en el arreglo A[0..n-1], el cual se
encuentra ordenado de menor a mayor:
int funcion(int[] a, int x, int i, int j) {
if (i>j)
return -1;
if (i==j) {
if (a[i]==x)
return i;
else
return -1;
} else {
int n1=(2i+j)/3;
int n2=(i+2j)/3;
if (x<=a[n1])
j=n1-1;
else if (x>=a[n2])
i=n2+1;
else {
i=n1+1;
j=n2-1;
}
return funcion(a, x, i, j);
}
}
Suponga en ambos casos que n es de la forman 3
k
,
!
k "# .

4. Implemente en Java el mtodo int alturaArbol(Nodo raz), que recibe por parmetro la raz de
un rbol binario y retorna la altura de ste. La clase Nodo est definida como:
class Nodo {
Object info;
Nodo izq;
Nodo der;
}

public int alturaArbol(Nodo r) {
if ( r != null) {
int alturaIzq = alturaArbol(r.izq);
int alturaDer = alturaArbol(r.der);
return 1 + (alturaIzq > alturaDer ? alturaIzq : alturaDer);
}
return 0;
}

5. Implemente en Java una pila utilizando listas enlazadas que almacene caracteres de una palabra. Luego
implemente un algoritmo de orden lineal que devuelva verdadero si la palabra formada con los caracteres es
palndrome y falso si no lo es. Para ello use pilas temporales para comparar cada uno de los valores.

public boolean palindrome() {
PilaLe d = new PilaLe();
PilaLe e = new PilaLe();
while(lista!=null) {
Object celem = desapilar();
d.apilar(celem);
e.apilar(celem);
}
while(e.lista!=null) {
Object eelem = e.desapilar();
apilar(eelem);
}
while(lista!=null) {
Object celem = desapilar();
Object delem = d.desapilar();
if (!celem.equals(delem))
return false;
}
return true;
}


6. Tenemos una implementacin de una cola usando un arreglo, con las variables primero y ultimo apuntando al
primer y ltimo elemento respectivamente. Tenemos la variable numElem con la cantidad de elementos. En un
momento determinado se desea obtener una copia de la cola, pero que ahora el primero corresponda a la
primera posicin del arreglo. Implemente tal mtodo.

public ColaArreglo copia() {
int ini = primero;
int nE = numElem;
ColaArreglo nuevacola = new ColaArreglo();
while(nE>0) {
nuevacola.encolar(arreglo[ini]);
ini = (ini+1)%MAX_ELEM;
nE--;
}
return nuevacola;
}

7. Responder Verdadero o Falso segn corresponda:
a) La complejidad en un algoritmo de recorrido de un rbol binario es lineal. V
b) La mnima complejidad de un algoritmo de bsqueda es O(log n). V
c) La mnima complejidad de un algoritmo de ordenacin es cuadrtica. F
d) La complejidad de un algoritmo de bsqueda en un rbol binario es logartmica. V
e) La complejidad de un algoritmo para encolar un elemento en una cola de prioridad es O(1). F
f) La invariante del algoritmo de ordenacin por insercin y por seleccin parten el arreglo en 2, los ordenados
y los desordenados. V
g) La invariante del algoritmo de separacin de nros positivos y negativos parte el conjunto en 3, los positivos,
los negativos y los ceros. F
h) La optimizacin del algoritmo recursivo de x
n
tiene una complejidad O(n log n). F
i) La solucin recursiva del algoritmo para la serie Fibonacci tiene una complejidad O(n
2
). F
j) La herencia mltiple en Java se implementa con el uso de la palabra reservada extends. F
k) En rboles binarios, el nro de nodos externos es igual al nro de nodos internos + 2n. F
l) El nro de rboles binarios distintos que se puede generar con 4 nodos internos es 14. V
m) El mtodo EncontrarPrevio en una lista enlazada tiene complejidad O(k). F
n) El mtodo apilar en una pila, con la opcin para doblar el tamao del arreglo en caso haya overflow, tiene una
complejidad O(k). F
o) tail recursin son las nicas recursiones que pueden transformarse a iterativas, con el uso de una pila. F
p) Una cola de prioridad tiene sus algoritmos de encolar de O(1) y de sacar O(n). V
q) El padre de un nodo en un rbol heap es el que est en posicin j/2 y los hijos en posiciones 2j y 2j+1. V
r) El algoritmo de insercin en un rbol heap implementado con arreglos tiene complejidad O(n). F
s) Existen 2 formas de buscar elementos en un arreglo, la secuencial de O(n) y la binaria de O(log n). V
t) Los algoritmos estaVacia del TAD lista, pila y cola tienen O(1). V

You might also like