Practica General INF121 Programacion 2
Practica General INF121 Programacion 2
INF-121: Programación II
Práctica General II/2023
Auxiliares de Docencia:
INSTRUCCIONES:
Cada ejercicio debe considerar el enunciado, diagrama de clases y la solución de los problemas.
24 de agosto de 2023
1
Contenido
1. Complejidad Algorı́tmica 3
2. Pilas y Colas 7
5. Recursividad 13
6. Teorema Master 15
7. Arboles(binarios y de búsqueda) 16
2
1. Complejidad Algorı́tmica
Hallar el T(n) y O(n) de los siguientes algoritmos
1.1 Algoritmo:
10 return contador == 2;
11 }
1.2 Algoritmo:
1 int ans = 0;
2 for(int i = 1; i <= n; i *= 3){
3 for(int j = 0; j * j < n; j++){
4 for(int k = 0; k * k < n; k++){
5 ans += i;
6 }
7 }
8 }
1.3 Algoritmo:
1 int n;
2 cin >> n;
3 int v[n];
4 for(int i = 0; i < n; i++)
5 read(v[i]);
6 for(int mask = 0; mask < (1 << n); mask++){
7 for(int i = 0; i < n; i++){
8 if(mask & (1 << i)){
9 print(v[i]);
10 }
11 }
12 print("\n");
13 }
3
1.4 Algoritmo:
12
1.5 Algoritmo:
1.6 Algoritmo:
4
1.7 Algoritmo:
1 void solve(){
2 int n;
3 ll T;
4 cin >> n >> T;
5 for(int i = 0; i < n; i++)
6 read(v[i]);
7 vector<ll> L;
8 int N1 = n / 2 + 1;
9 int N2 = n - N1;
10 for(int mask = 0; mask < 1 << N1; mask++){
11 ll sum = 0;
12 for(int i = 0; i < N1; i++){
13 if(mask & (1 << i))
14 sum += v[i];
15 }
16 L.pb(sum);
17 }
18
19
20
21 ll ans = 0;
22 for(int mask = 0; mask < (1 << N2); mask++){
23 ll sum = 0;
24 for(int i = 0; i < N2; i++){
25 if(mask & (1 << i))
26 sum += v[i + N1];
27 }
28 if(sum > T)continue;
29 int a = 0, b = sz(L), mid;
30 while(b - a > 1){
31 mid = (a + b) >> 1;
32 if(L[mid] <= T - sum)
33 a = mid;
34 else
35 b = mid;
36 }
37 ans = max(ans, sum + L[a]);
38 }
39 print(ans);
40 }
41
1.8 Algoritmo:
5
1
14 ll n,m,k;
15 read(n, m, k);
16 ll a = 1,b = n*m + 1, m1;
17 while(b - a > 1){
18 m1 = (a + b) / 2;
19 if(f(m1,n,m) < k)
20 a = m1;
21 else
22 b = m1;
23 }
24 print(a);
25
26 return 0;
27 }
1.9 Algoritmo:
2 int cont = 0;
3 for(int i = 0; i < n * n; i++){
4 for(int j = n * n; j >= 1; j--){
5 for(int k = 0; k * k < n * n; k++){
6 cont++;
7 }
8 }
9 }
6
1.10 Algoritmo:
2 int A[N_MAX];
3 int suma = 0;
4 for(int i = 1; i <= N; i++){
5 for(int j = 1; j <= N * N; j *= 5){
6 for(int k = N; k >= 1; k /= 10){
7 suma += i + j + k;
8 }
9 }
10 }
2. Pilas y Colas
2.1 Se almacena la información de una materia en una Pila de Prácticas [nota, nombre, número
de práctica](los datos de cada una de las prácticas), se pide:
2.3 Se tiene una Pila de Cajas [área (m2 ), color, contenido]. Se pide:
a) Verificar que la pila de cajas este apropiadamente “equilibrada”. Una pila de cajas esta
“equilibrada” si para toda caja “a” que esta sobre una caja “b”, se cumple que el área
de la caja “a” es menor o igual al área de la caja “b” (áreaa ≤ áreab ).
7
b) Ordenar las cajas de la pila de forma que estén apropiadamente equilibradas.
c) Agrupar todas las cajas de la pila por el color.
2.4 Se tiene una Cola de Personas [nombre, ci, edad] que esperan en el banco.
a) El banco tiene polı́ticas de dar prioridad a las personas de mayor edad, de tal forma
que todas las personas con una edad ≥ 60 años deben ser trasladadas al principio de la
cola.
b) Mostrar los nombres de las personas que tienen el último dı́gito de C.I. igual a “k”
c) Hallar cual es último dı́gito de C.I. mas repetido.
2.5 Se tiene una Cola de Automóviles [placa, marca, tipo, año] que esperan a ser atendidos en
la inspección vehicular de este año. Se pide:
a) Ordenar a los automóviles por año de forma ascendente. De forma que se atiendan
primeramente a los automóviles mas antiguos y posteriormente a los automóviles mas
actuales.
b) Mostrar la(s) placa(s) de los automóviles del año mas antiguo.
c) Agrupar a todos los automóviles por su marca.
2.6 Se tiene una Cola de Canciones [artista, titulo, genero, nro. de reproducciones] que repre-
senta una lista de reproducción de musica. Se pide
8
d) Invertir el orden de la cola circular sin el uso de estructuras auxiliares.
a) De la pila ı́-esima contar cuantas cadenas tienen una secuencia bien balanceada.
Se dice que una secuencia esta bien balanceada si para cada carácter de apertura tiene
uno de cierre que sea de su mismo tipo.
Ejemplo de secuencias bien balanceadas: ”()(){[]}”, ”((({{}})))[]{[]}”, ”(){}[]”.
Ejemplo de secuencias mal balanceadas: ”){}[[[]]]”, ”{}(([{)}]))”, ”)(”.
b) De cada pila, eliminar las cadenas que no esten bien balanceadas.
3.2 Se sabe que una multipila guarda los registros de cada actividad del año por mes, es decir la
primera pila es enero, la segunda es febrero y la doceava pila es diciembre.
Cada pila guarda Actividad [id, fecha, encargado, tipo de actividad, pila de Participantes].
Cada Participante tiene [id, curso, nombre, edad]
3.3 La Facultad de Ciencias Puras y Naturales almacena los datos de las 6 carreras en una
multipila, donde la pila i-ésima almacena los datos de la siguiente manera.
Pila 1 - Informática
Pila 2 - Fı́sica
Pila 3 - Matemática
9
Pila 4 - Quı́mica
Pila 5 - Estadı́stica
Pila 6 - Biologı́a
Cada Pila guarda los datos de los Docentes de cada carrera con los siguientes atributos [ci,
nombre, carga horaria, cantidad de materias que imparte, salario]
3.4 Se tiene una multipila que guarda el registro de todos los mundiales de futbol a partir del
año de 1930, es decir:
Cada pila tiene los datos de Equipo se tiene los siguientes atributos [pais, puesto, cantidad
de goles, expulsados]
a) El mundial del 2010 mostrar todos los equipos ordenados del primero al ultimo.
b) de cada mundial eliminar al equipo que tenga menos goles anotados en el torneo.
3.5 Se guarda el inventario de Casas de la ciudad de La Paz, cada Casa tiene los siguientes
atributos [codigo, nombre propietario, tamaño (m2 ) ]. Este inventario esta representado por
una Multiple pila. Sea una cola de Zonas de La Paz dicha cola tiene nombre de la zona. Se
sabe que las casas de la primera zona estan en la primera pila, las casas de la segunda zona
estan en la segunda pila, asi sucesivamente.
3.6 Se almacena Peliculas en una Multicola donde cada Pelicula tiene los atributos [nombre,
genero, duracion, año de estreno].
a) De cada cola, identificar a las peliculas que tengan el año de estreno X y llevar al inicio
de cada pila.
b) De las peliculas de genero Y, llevar a la primera cola, pero primero las peliculas de la
primera cola repartir a cualquier otra cola.
c) Clasificar todas las peliculas de la siguiente manera:
En la primera cola poner todas las peliculas que duren de 0 a 1 hora.
En la segunda cola poner todas las peliculas que duren de 1 a 2 horas.
10
En la tercera cola poner todas las peliculas que duren de 2 a 3 horas.
En la cola i-esima poner todas las peliculas que duren de (i - 1) a i horas.
3.7 Se tiene una Multi Cola de Polinomios, donde cada cola tiene un polinomio de grado k de la
siguiente forma p(x) = 2 · x5 + 10 · x2 + 10, su grado del polinomio es 5.
Cada cola tiene un Polinomio que tiene los siguientes atributos [exponente, coeficiente].
Tome en cuenta que los datos deben estar ordenados de manera decreciente, es decir en cada
cola el primer valor del grado del polinomio es el mas alto y al final esta el grado del polinomio
mas bajo. Ejemplo del polinomio anterior en la cola deberian estar de la siguiente manera:
[[2, 5], [10, 2],[10, 0]]
a) Se desea evaluar todos los polinomios con el valor X, y hallar la suma total.
b) Se desea completar el polinomio, es decir en cada cola, supongamos que el grado de
ese polinomio es k, entonces deberian existir todos los grados de ese polinomio desde k,
k − 1, k − 2, k − 3 ,..., 1, 0.
3.8 Se tiene una Multicola de Jugadores, donde cada Jugador tiene [id, nombre, posicion, equipo,
goles].
Ademas se tiene una Pila de Entrenadores, cada Entrenador tiene [equipo, titulos ganados].
a) Se desea mostrar a los jugadores que tengan al menos 1 gol del entrenador X.
b) Se desea reordenar la multicola basandonos en la Pila, es decir si en la pila el primer
Entrenador dirige al equipo X, entonces en la Multi Cola en la primera Cola deben estar
los jugadores dirigidos por ese entrenador X, si en la pila el segundo entrenador dirige
al equipo Y, entonces en la Multi Cola en la segunda cola deben estar los jugadores
dirigidos por el entrenador Y, asi sucesivamente.
a) Adicionar un nuevo teléfono después del i-ésimo nodo, siempre y cuando no esté en la
lista.
b) Contar los números de teléfono que son números capicúas.
c) Eliminar el número de telefono X y ponerlo al principio de la lista. Si no existe imprimir
”NÚMERO NO REGISTRADO”
a) En una lista mover los caracteres que sean alfabéticos y numéricos, y en la otra lista
mover los caracteres restantes.
b) En ambas listas reemplazar cada caracter alfabetico por su siguiente valor. Por ejemplo
en lugar de ′ i′ colocar ′ j ′ , en el caso de ′ z ′ se debe reemplazar por ′ a′ y ′ Z ′ por ′ A′ .
c) Crear una 3ra lista mediante la eliminación de caracteres numéricos de ambas listas y
luego ordenarla de acuerdo a los valores ascendentemente.
11
4.3 Dada una lista simple de pilotos <nombre, edad>, y una lista doble de vuelos <origen,
destino, nombrePiloto>. Se pide:
a) Llevar al final de la lista todos los vuelos del piloto que realizó más vuelos.
b) Mostrar al piloto con nombre X y sus vuelos. c) Mover a los pilotos que se jubilaran en
los próximos 10 años al inicio de la lista.
c) Llevar al principio de la lista todos los vuelos del piloto que realizó menos vuelos.
4.4 Dada una lista doble circular de canciones <titulo, nombreArtista, género>, y una lista
simple de artistas <nombre, edad>. Se pide:
4.5 La información de los estudiantes que cursan materias en el periodo 02/2023 del nuevo
pensum de la carrera de informática se almacena en las siguientes estructuras:
Lista Simple de Materias: Almacena <sigla, nombre, paralelo, nombre del docente, Lista
Doble de Estudiantes>
• Lista Doble de Estudiantes: Almacena <cedula de identidad, registro universitario,
paterno, materno, nombres>
Se pide:
4.6 La publicación de información del periódico digital “El Michin” es almacenada en las siguien-
tes estructuras:
Lista Simple Sección: Almacena <nombre de sección, Lista doble de noticias, Lista
simple circular de publicidad>
• Lista Doble de Noticias: Almacena <autor, tı́tulo, texto, hora de publicación>
• Lista Simple De Publicidad: Almacena <titulo, enlace, hora de publicación>
Se pide:
Lista Doble Bien Inmueble: Almacena < id casa, tamaño (mt2 ), ubicación, Lista Simple
de Habitaciones>
12
• Lista Simple Circular de Habitaciones: Almacena <tipo habitacion, color, tamaño,
Lista Simple de Muebles>
◦ Lista Simple de Muebles< cantidad, nombre>
Se pide:
a) Mostrar el bien inmueble que tengas más muebles en las habitaciones de tipo DORMI-
TORIO.
b) Del bien inmueble más grande eliminar las habitaciones que tengan X muebles.
c) Añadir un mueble a cada habitación de un bien inmueble que este en la ubicación Y
Lista Simple Ferias Agropecuarias: <nomFeria, fecha, lugar, Lista Simple Puestos>
• Lista Simple Puestos: <nroPuesto, nomProductor, Lista Simple Circular Productos>
◦ Lista Simple Circular Productos: <nom prod, precio>
Se pide:
5. Recursividad
Resolver los siguientes ejercicios mediante algoritmos recursivos
Ejemplo de entrada 2
reconocer
Ejemplo de salida 2
Es palindrome
13
5.3 Dados dos números a y b, hallar su máximo común divisor(nota: a y b pueden ser negativos).
Ejemplo de entrada
36 26
Ejemplo de salida
2
5.4 Dada una cola que contiene n ∗ n números enteros, generar una matriz caracol de n filas y n
columnas con los elementos de dicha cola.
Ejemplo de entrada
n=9
cola: [7, 5, 3, 9, 1, 8, 4, 6, 2]
Donde 7 es el primer elemento de la cola, y 2 el último.
Ejemplo de salida
753
629
481
Ejemplo de entrada
lista doble: [↚ 17 ⇆ 25 ⇆ 9 ⇆ 13 ⇆ 21 ⇆ 81 ⇆ 16 ⇆ 62 ⇆ 72 ↛]
Ejemplo de salida
a) Permutaciones: implementar una función recursiva para calcular las formas de ordenar
n distintos elementos.
Ejemplo de entrada
n=9
vector: {1, 2, 3}
Ejemplo de salida
{1, 2, 3}, {1, 3, 2}, {2, 1, 3}, {2, 3, 1}, {3, 1, 2}, {3, 2, 1}
b) Subconjuntos: implementar una función recursiva para mostrar las formas de tomar una
cantidad arbitraria de n elementos sin importar el orden y sin repetición.
Ejemplo de entrada
n=9
vector: {1, 2, 3}
Ejemplo de salida
14
{}, {1}, {2}, {3}, {1, 2}, {1, 3}, {2, 3}, {1, 2, 3}
Se pide:
Se pide:
6. Teorema Master
Hallar O(n) en los siguientes ejercicios usando el ‘Teorema Master’.
6.6 T(n) = 3 T( n3 ) + n
2
+ 3
100
6.7 T(n) = T( n2 ) + ( 11
1
)n2 - n + 10
4
6.8 T(n) = 5
T( n3 ) + 21 n + 6
2
15
7. Arboles(binarios y de búsqueda)
7.1 Un problema clásico en la teorı́a de árboles es el LCA, Lowest Common Ancestor. Dados
dos nodos, encontrar los ancestros en común de los dos nodos (Cada nodo tiene un ID
correspondiente).
Ejemplos
El LCA de 4 y 5 es 6
El LCA de 9 y 3 es 7
El LCA de 8 y 4 es 0
Ejemplo
En el árbol de ejemplo el nivel 3 es el nivel más alto en el que el árbol es completo.
16
7.3 Dentro de una lista simple se organizaron las distintas familias de un condominio en un árbol
binario de búsqueda de familias ordenado según la edad de cada miembro de la familia (edad,
apellidos, nombres, edad)
7.5 Se tienen 2 árboles binarios de búsqueda que almacenan las notas de los estudiantes, un árbol
binario de estudiantes y el otro árbol binario de notas, se pide:
a) Mostrar los nombres de estudiantes respecto a las notas de los estudiantes de menor a
mayor.
b) Añadir a un nuevo estudiante y su nota, manteniendo los árboles ordenados según la
nota.
7.6 Sea un Árbol binario de búsqueda que almacena los números de las lı́neas de micro de la
ciudad de La Paz. Se pide:
17
b) Mostrar toda la ruta de recorrido del árbol, hasta encontrar x, si existe.
7.7 Dado un árbol binario, con enteros positivos que representan el ID único de cada uno. Se
pide:
7.8 Dado un árbol binario, donde cada nodo almacena los nombre de plato tı́picos de Bolivia:
<nombre, departamento>. Se pide:
a) Podar los hijos del nodo del plato “majadito”, e insertar dos nuevos nodos.
b) Verificar si el subarbol izquierdo y el derecho tienen la misma cantidad de niveles.
8.2 Insertar en AVAVL(Árbol balaceado)L: Inserta el número 10 en el árbol AVL que creaste en
el ejercicio anterior. Muestra cómo se ve el árbol después de la inserción.
8.3 Árbol Rojo-Negro Complejo: Crea un árbol rojo-negro con los números 15, 10, 20, 5, 12, 25,
30 en ese orden. Muestra el árbol resultante y asegúrate de aplicar todas las reglas de los
árboles rojo-negro.
8.4 Eliminación en Rojo-Negro: Elimina el número 15 del árbol rojo-negro que creaste en el
ejercicio anterior. Muestra cómo se ve el árbol después de la eliminación y reequilibrio.
18
a) Obtener un segundo array de numeros, con el correspondiente rango de cada elemento.
El rango del elemento minimo es 1, el rango del segundo elemento minimo es 2, etc.
b) Trasladar los elementos a un montı́culo y mostrar los valores menores a “k”.
9.3 Una escuela busca organizar la forma en la que atiende las inscripciones de sus Estudiantes
(nombre, ci, promedio), de forma que los primeros en estar en la cola de inscritos serán
aquellos estudiantes con mayor promedio, se pide:
9.4 Usando una cola de prioridad encontrar el k-ésimo número mas grande de una gran cantidad
de números introducidos por teclado.
19