Está en la página 1de 11

Análisis de Algoritmo

Proyecto Final

Nombre Alumno:

Nombre de la Asignatura: Análisis de Algoritmo.

Instituto IACC

Fecha:
INSTRUCCIONES: Lea el siguiente caso y en base a los contenidos abordados en el curso,
realice las acciones solicitadas.

Presentación del caso:

1. Suponga que está cocinando un queque, haga el diagrama de flujo para la receta de
cocina.

2. Suponga que Ud. es programador experto en del nuevo lenguaje Phlayt v3.0 (Como
aclaración, este nombre de lenguaje informático es ficticio) y necesita saber si una
función matemática tiene sus paréntesis balanceados (es decir tiene tantos símbolos
de abre paréntesis como de cierre paréntesis), lo que es un problema clásico de pilas.
Lamentablemente, Phlayt no tiene dentro de sus bibliotecas una implementación de
pilas y solo tiene la estructura de datos cola. Implemente, en pseudocódigo, una pila
utilizando la estructura de datos cola.

Cree las funciones pop() y push() en términos de encolar() y


desencolar(). Notas:
a) Asuma que encolar() y desencolar() existen.

b) Solamente preocúpese que haya tantos símbolos “(“como símbolos”)”. No se


preocupe si hay expresiones incorrectas como “( 9 + ) -3”.

3. Phlayt v3.0 tampoco implementa algoritmos para ordenar estructuras. Como es su


lenguaje favorito, Ud. ha decidido implementar esto utilizando un árbol de
búsqueda binaria. Escriba, en pseudocódigo, un algoritmo que reciba un árbol de
búsqueda binaria y retorne una cola ordenada. ¿Qué tipo de algoritmo es: voraz,
divide y vencerás o vuelta atrás?
Notas:
a) El caso base es: “un árbol nulo o sin raíz es una lista”.

b) Recordar que los árboles se definen de forma recursiva: un árbol es la raíz, un


subárbol izquierdo y un subárbol derecho.

4. Ahora, Ud. ha sido contratado por el INE para catalogar a todas las personas que
viven en su región según su nombre y apellido en un hash encadenado. Entonces:

a) Defina la función de hash que utilizaría y ¿por qué?

b) ¿Cuánto demora su hash en encontrar un nombre en términos de “n”? (Si “n” es


el total de personas a catalogar).

1) Finalmente, Ud. ya ha catalogado todas las personas de su región. Dado su


rendimiento en el trabajo encomendado, le han solicitado que ordene las regiones
por cantidad de habitantes de menor a mayor. ¿Qué tiene menor complejidad
algorítmica: ordenarlos utilizando quicksort o crear un árbol de búsqueda binaria y
recorrerlo en inorden? Justifique su respuesta.
DESARROLLO

Solución 1:

1.-

· Entrada: Ingredientes empleados para el Queque.

· Proceso: Elaboración de la receta en la cocina para el Queque.

· Salida: Terminación del Queque.

Ingredientes:

 1 cucharadas de mantequilla sin sal a temperatura ambiente, o aceite


 1 taza de azúcar granulada
 2 huevos a temperatura ambiente
 pizca de sal (omitir si usan mantequilla con sal)
 1 cucharadita de vainilla
 ralladura de limón, naranja, opcional
 2 tazas de harina sin polvos de hornear
 1 cucharaditas de polvos de hornear
 1 taza de leche o yogurt natural

Preparación:

1. Precalentar el horno a 350F o 180C.


2. Enmantequillar y luego en harinar un molde de queque, golpearlo de cabeza un par de veces
para botar el harina sobrante.
3. En un bol amplio batir con un tenedor la mantequilla y el azúcar hasta que se forme una
pasta, agregar un huevo, revolver con movimientos circulares hasta que obtengan una crema,
agregar el otro huevo, repetir.
4. Agregar la pizca de sal, vainilla y ralladura si usan. Revolver bien
5. Agregar 1 taza de harina y los polvos de hornear revolver gentilmente con movimientos
circulares unas 5 veces.
6. Agregar la leche y seguir revolviendo hasta obtener una crema.
7. Agregar el harina restante y revolver gentilmente hasta que se incorpore. No revolver
demasiado para que no les quede duro el queque, si quedan algunos grumos no importar.
8. Volcar el batido en el molde y hornear por 35-40 minutos hasta que esté dorado y al enterrar
un palito este salga limpio.
9. Dejar enfriar fuera del horno por 10 minutos, desmoldar.
Solución 2:

1. en pseudocódigo, una pila utilizando la estructura de datos cola.

Cree las funciones pop() y push() en términos de encolar() y desencolar().


Notas:
a) Asuma que encolar() y desencolar() existen.
b) Solamente preocúpese que haya tantos símbolos “(“como símbolos”)”. No se preocupe
si hay expresiones incorrectas como “( 9 + ) -3”.

pop(símbolo)
{
Si símbolo == '(' y contadorParsimbolo ==1
Entonces //verifica condición
nodo n;
n<-new nodo();
n.dato<- símbolo;
n.siguiente<-null;
auxiliar.siguiente<-n;
auxiliar<-n;

FinSi
Si símbolo == ')' y contadorParsimbolo ==2
Entonces //verifica condición

nodo n;
n<-new nodo();
n.dato<- símbolo;
n.siguiente<-null;
auxiliar.siguiente<-n;
auxiliar<-n;
FinSi

push(símbolo)
{
nodo actual<-primero;
nodo anterior<-null;
mientras actual!=null {
Si actual.dato== símbolo Entonces
Si actual==primero Entonces //verifica condición

Primero<-primero.siguiente;
nodo segundo;
segundo<-new nodo();
segundo.dato<-actual.dato;
segundo.siguiente<-cabeza;
cabeza<-segundo;
Sino
anterior.siguiente<-actual.siguiente;
nodo segundo;
segundo<-new nodo();
segundo.dato<-actual.dato;
segundo.siguiente<-cabeza;
cabeza<-segundo;
Finsi
Fin mientras
Anterior<-actual;
Actual<-actual.siguiente;
}
}
Solución 3:

1. ¿Qué tipo de algoritmo es: voraz, divide y vencerás o vuelta atrás?

Notas:
a) El caso base es: “un árbol nulo o sin raíz es una lista”.
b) Recordar que los árboles se definen de forma recursiva: un árbol es la raíz, un
subárbol izquierdo y un subárbol derecho.

Algoritmo divide y vencerás en una lista ordenada :


inicio
Arbol[1..N]
leer(Arbol[i]) //carga datos para el arbol
Fin para
primero <- 1
ultimo <- 100
quicksort (Arbol[],100)
Fin

Funcion quicksort(primero, ultimo:entero)


i <- primero
j <- ultimo
central <- Arbol[(primero,ultimo) div 2]
repetir
mientras A[i]central
j <- j - 1
fin mientras
si i < = j Entonces //verifica condición
aux = A[i]
A[j] = A[i]
A[i] = aux
i=i+1
j=j-1
fin si
hasta que i > j
si primero < j Entonces //verifica condición
partir(primero,j)
fin si
si i < ultimo Entonces //verifica condición
partir(i, ultimo)
fin si

fin función quicksort


Solución 4:

a) Defina la función de hash que utilizaría y ¿por qué?


La función de hash que se utiliza es de dispersión debido a que el tipo de análisis es
sobre un grupo de persona de una región que representa una parte de la nación, es
por ello que se trabaja en una tabla fragmentada.
b) ¿Cuánto demora su hash en encontrar un nombre en términos de “n”? (Si “n” es
el total de personas a catalogar).
Para poder determinar el Nº esperado de registros en saturación se usa una función
de dispersión aleatoria, se ocupa la función de Poisson da la proporción esperada de
direcciones asignadas con x cantidades de registros
( K / N ) x * e( K / N )
P( x) 
x!

K: Nº registros
B: cantidad de registros que caben en de nacionalidad
N: Nº de direcciones de memoria disponibles
DE (densidad de empaquetamiento) = K / B * N

Arch. Arch.
Compartimientos compartimientos
nacional Internacional

Nº registros nombre 750 750


y apellido

Nº Habitantes 1000 500

Tamaño 1 2
Compartimiento

DE 0.75 0.75

Proporción entre 0.75 1.5


registros y
direcciones
5) Finalmente, Ud. ya ha catalogado todas las personas de su región. Dado su rendimiento en
el trabajo encomendado, le han solicitado que ordene las regiones por cantidad de habitantes
de menor a mayor. ¿Qué tiene menor complejidad algorítmica: ordenarlos utilizando quicksort
o crear un árbol de búsqueda binaria y recorrerlo en inorden? Justifique su respuesta.
La opción más aceptable que se espera en el quicksort debido a que no es tan compleja como
implementar un árbol binario recursivo el cual requiere un alto dominio en el lenguaje de
programación además no se especifica la cantidad de información sin embargo para trabajar si
se requiere mayor rendimiento es necesario implementar Búsqueda binaria ya que la diferencia
principal es el tiempo de búsqueda que es mucho más rápido que el otros método con un bajo
nivel crítico de pérdida o latencia de tiempo.
REFERENCIAS BIBLIOGRÁFICAS

 IACC (2016). Hashing y recursión dentro de algoritmos. Análisis de Algoritmos. Semana


8.. Recuperado 08, 2018, de
http://online.iacc.cl/pluginfile.php/3907599/mod_resource/content/2/Semana_8.pdf
 IACC (2016). Ordenamiento de datos y algoritmos de ordenamientos. Análisis de
Algoritmos. Semana 5.. Recuperado 07, 2018, de
http://online.iacc.cl/pluginfile.php/3907587/mod_resource/content/2/Semana_7.pdf
 IACC (2016). Estrategias de construcción de algoritmos. Análisis de Algoritmos. Semana
5.. Recuperado 06, 2018, de
http://online.iacc.cl/pluginfile.php/3907560/mod_resource/content/2/Semana_6.pdf

 IACC (2016). Estrategias de construcción de algoritmos. Análisis de Algoritmos. Semana


5.. Recuperado 05, 2018, de
http://online.iacc.cl/pluginfile.php/3907560/mod_resource/content/2/Semana_5.pdf
 IACC (2016). Complejidad de algoritmos. Análisis de Algoritmos. Semana 4..
Recuperado 05, 2018, de
http://online.iacc.cl/pluginfile.php/3907552/mod_resource/content/2/Semana_4.pdf

 IACC (2016). Introducción a los algoritmos. Análisis de Algoritmos. Semana 3..


Recuperado 05, 2018, de
http://online.iacc.cl/pluginfile.php/3907543/mod_resource/content/2/Semana_3.pdf

 IACC (2016). Introducción a los algoritmos. Análisis de Algoritmos. Semana 2..


Recuperado 05, 2018, de
http://online.iacc.cl/pluginfile.php/3907543/mod_resource/content/2/Semana_2.pdf

 IACC (2016). Estructuras de datos. Análisis de Algoritmos. Semana 1.. Recuperado 04,
2018, de
http://online.iacc.cl/pluginfile.php/3907521/mod_resource/content/2/Semana_1.pdf