Está en la página 1de 5

Proyecto

Análisis y Diseño de Algoritmos I


23 diciembre de 2022

Profesor: Jesús Aranda Monitor: Reynell Quevedo

Enunciado Proyecto ADA


Para este proyecto se emplearán 2 ejercicios, los cuales se pensaron para ser desarrollados
con estructuras de datos no convencionales. La estructura de datos pensada para cada
problema, respectivamente, son: Disjoint Set Union o Union-Find, la cual fue abordada en
clase; y Trie o Prefix Tree, la cual podrá encontrar documentación acerca del algoritmo y su
implementación en el campus. Si bien estos ejercicios fueron pensados con estas
estructuras en mente, el desarrollo del proyecto puede ser realizado en cualquier otra
estructura de datos siempre y cuando se respete la complejidad planteada, y esta se
encuentre debidamente explicada en el informe a excepción de ser esta otra vista en clase.
Por cada ejercicio debe entregarse la idea detrás de la implementación, la explicación de las
estructuras de datos usadas en caso de usar otras no explicadas o la explicación de su
implementación particular si esta difiere de la vista en clase, y la implementación en código.
Problema 1. Reestructuración de la compañía

Una compañía tiene N departamentos (𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝 𝑐𝑐𝑐𝑐𝑐𝑐 𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒 𝑒𝑒𝑒𝑒 𝑒𝑒𝑒𝑒 𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟 1 ≤ 𝑁𝑁 ≤ 105 ). Por
razones que se desconocen, estos N departamentos deciden unificarse, y pueden unificarse
de varias maneras: la primera es unir 2 departamentos, un departamento A (1 ≤ 𝐴𝐴 ≤ 𝑁𝑁) y
un departamento B (𝐴𝐴 ≤ 𝐵𝐵 ≤ 𝑁𝑁) , por lo que ambos serán ahora el mismo departamento; la
segunda es unir todos los departamentos entre 2 números A y B (siguiendo la condición
antes descrita), por lo que todo departamento C tal que (𝐴𝐴 ≤ 𝐶𝐶 ≤ 𝐵𝐵) será el mismo
departamento ahora. Adicional a esto, se preguntará si, dados 2 apartamentos A y B, estos
son el mismo o no.

Entrada y Salida:

Formato de entrada Formato de salida

𝑁𝑁 𝑄𝑄 𝑅𝑅0
𝑞𝑞0 𝐴𝐴0 𝐵𝐵0 𝑅𝑅1
𝑞𝑞1 𝐴𝐴1 𝐵𝐵1 . ..
. .. 𝑅𝑅𝐾𝐾−1
𝑞𝑞𝑄𝑄−1 𝐴𝐴𝑄𝑄−1 𝐵𝐵𝑄𝑄−1

N es el número de departamentos K es la cantidad de queries de tipo 3.

Q es el número de queries suministradas 𝑅𝑅𝑖𝑖 es un valor de tipo booleano, true si 𝐴𝐴𝑖𝑖 𝑦𝑦 𝐵𝐵𝑖𝑖
pertenecen al mismo grupo, false en caso
𝑞𝑞𝑖𝑖 es el tipo de query a ejecutar: contrario.
- Si es 1, unir los departamentos 𝐴𝐴𝑖𝑖 𝑦𝑦 𝐵𝐵𝑖𝑖
- Si es 2, unir todos los departamentos
entre𝐴𝐴𝑖𝑖 𝑦𝑦 𝐵𝐵𝑖𝑖
- Si es 3, responder si 𝐴𝐴𝑖𝑖 𝑦𝑦 𝐵𝐵𝑖𝑖 fueron
unidos.

Ejemplo:
Entrada Salida

86 false
325 true
125 true
325
247
212
317
Explicación:

En la primera query de tipo 3, ningún departamento había sido unido.


En la segunda query de tipo 3, previamente se había unido el departamento 2 y 5.
En la tercera query de tipo 3, previamente se unieron todos los departamentos entre 4 y 7, y
como previamente 5 estaba unido con 2, entonces los departamentos 2, 4, 5, 7 son un solo
departamento. Luego, se unieron todos los departamentos entre 1 y 2, por lo que 1, 2, 4, 5,
6, 7 son un mismo departamento ahora.

Problema 2. Autocompletado 2.0


Como su nombre indica, este problema es una extensión del problema del autocompletado
planteado anteriormente, por lo que nuevamente, usted está programando un programa de
autocompletado de palabras. Esta vez, las instrucciones han cambiado levemente, pero
siguen siendo de 2 tipos.
- 1 S, se almacena la palabra S
- 2 S, se lee la palabra S y, con base en las palabras almacenadas previamente, se
predice cuál sería la palabra deseada, que se llamará T. T será una palabra tal que
un prefijo de T es el máximo prefijo de S posible. En caso de existir varias cadenas T
que cumplan esta condición, se retornará el prefijo que más veces haya sido
almacenado, y en caso de otro empate, la menor lexicográficamente.
Se procesarán N (1 ≤ 𝑁𝑁 ≤ 106 ) instrucciones que pueden ser de tipo 1 o 2. La cadena de
texto S nunca sobrepasará los 20 caracteres.

Entrada y Salida:

Formato de entrada Formato de salida

𝑁𝑁 𝑇𝑇0
𝑞𝑞0 𝑆𝑆0 𝑇𝑇1
𝑞𝑞1 𝑆𝑆1 . ..
. .. 𝑇𝑇𝐾𝐾−1
𝑞𝑞𝑁𝑁−1 𝑆𝑆𝑁𝑁−1
N es la cantidad de instrucciones K es la cantidad de queries de tipo 2.

𝑞𝑞𝑖𝑖 es el tipo de query a ejecutar, 𝑞𝑞𝑖𝑖 𝜖𝜖{1,2}. 𝑇𝑇𝑖𝑖 es la cadena sugerida.


Ejemplo:

Entrada Salida

9 casamiento
1 arroz arroz
1 casamiento caza
1 caza caza
1 cazador
1 cazadora
2 casa
2 aro
2 caperucita
2 pedro

Consideraciones
1. Las implementaciones no requieren mayor complejidad en usabilidad que la de
poder ser ejecutado en terminal, ni necesita ser compilado ni tener interfaz gráfica,
con poder ejecutarlo desde cualquier IDE es suficiente. Toda funcionalidad extra
necesita ser explicada en el informe y puede tener un valor extra.

2. Cada programa debe ser capaz de leer un archivo input.txt con el formato descrito
en el ejercicio y escribir en un archivo output.txt con el formato descrito en el
ejercicio. No se tomará en cuenta la implementación si no es capaz de hacer
esto.

Cada programa será probado con 10 casos de prueba, de los cuales 1 se suministró
como ejemplo, y el otro se encontrará en el campus. Al finalizar la entrega, a más
tardar al día siguiente, se entregarán los resultados de estas pruebas.

Grupos de trabajo

El proyecto puede ser desarrollado por grupos de máximo 4 personas.

Entrega

Las entregas consisten en un archivo empaquetado y comprimido. El nombre del archivo


debe ser escrito de la siguiente forma: ProyectoApellido1Apellido2Apellido3Apellido4. zip.
Debe contener los siguientes elementos:

• Código fuente con la aplicación (ver Consideraciones arriba)


• Archivos de entrada y salida utilizados

• Archivo de reporte del proyecto proyecto.pdf con:

o Idea de la estrategia de cada una de las soluciones propuestas (puede


incluir seudocódigo y ejemplos en la medida que facilite comprender la
estrategia de solución)
o Análisis teórico de la complejidad temporal de las dos soluciones
implementadas
o Descripción y análisis de las pruebas realizadas: En el reporte deben estar
resultados de pruebas con distintos tamaños de entrada y con su respectivo
tiempo. Relacione los tamaños de entrada con su tiempo de respuesta
(Considere 10 pruebas propias registradas en el informe con distintos
tamaños de entrada para cada problema).
o Conclusiones y aspectos para mejorar

Fecha de Entrega Máxima: 26 de enero de 2023 por medio del campus virtual.

También podría gustarte