Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Laboratorios de computación
salas A y B
Profesor: M.I. Edgar Tista García
Grupo: 01
No de Práctica(s): 11
Semestre: 2021-2
Observaciones:
CALIFICACIÓN:
__________
Cote Valencia Alexis Daniel Gpo1 Práctica 11 Estrategias para la
construcción de algoritmos
OBJETIVOS DE LABORATORIO
El objetivo de esta guía es implementar, al menos, dos enfoques de diseño
(estrategias) de algoritmos y analizar las implicaciones de cada uno de ellos.
ACTIVIDAD 1
Buscar contraseña
ACTIVIDAD 5
Quick Sort
Figura 9.2 Ejecución Exitosa del Código Mínimo y Máximo de una Lista
Cote Valencia Alexis Daniel Gpo1 Práctica 11 Estrategias para la
construcción de algoritmos
Este código ocupa recursividad para llegar al resultado; imagine que llamamos a
una función dentro de sí misma, esto lo podemos visualizar como si estuviéramos
subiendo las escaleras un edificio así que, la primera vez que se usa una función
estamos en la planta baja y cuando se llama dentro de sí misma por primera vez
hemos subido al primer piso del edificio, pero nuevamente se llama a sí misma
entonces hemos subido al segundo piso; cuando llegamos al último piso del edificio
(o sea ya no se necesita la recursividad) tenemos que ir bajando los pisos para
llegar a la planta baja por lo tanto iremos saliendo de las “capas” de recursividad
hasta encontrarnos con la primera vez que utilizamos la función en cuestión., consta
de dos funciones:
MinMax Que recibe como parámetro de entrada una lista; dentro de la función
nos encontramos con un if para validar si la lista es de tamaño 1 porque de
ser así retorna dos veces el único valor de la lista, si no se cumple pasamos
a un elif que valida si la lista es de tamaño 2 para después hacer una
validación mediante otro if para saber si el valor de la posición inicial de la
lista es menor al de la siguiente posición (L[0]<=L[1]) y si esto se cumple
retornará la función L[0] seguido de L[1], pero si no se cumple retorna
primero L[1] y luego L[0]. Si tanto el if y el elif no se cumple pasaremos a un
else el cuál declara una variable que será el tamaño de la lista a la mitad.
Después lo que hace es igualar dos variables a la función con la que se está
trabajando (recursividad) pero esta vez con la primera mitad de la lista
((minL,maxL)=MinMax(L[:int(middle)])), tal parece que con la instrucción
L[:int(middle)] hace que sólo trabaje con la primera mitad de la lista, si la
lista es de número impar se estará trabajando con las primeras posiciones
que indique la variable int(middle) (esto quiere decir que supongamos que
la lista tiene 5 posiciones e int(middle) es 2, entonces trabajaremos con la
posición 0 y 1 de la lista) mediante este llamado se volverá a ejecutar lo
explicado anteriormente hasta que sólo tengamos una lista de un elemento.
Cuando esto suceda iremos retrocediendo en la recursividad hasta llegar a
la “función original” (dónde la utilizamos por primera vez) para ir al siguiente
paso el cuál consiste en prácticamente lo mismo que el anterior sólo que
ahora trabajamos con la segunda mitad de la lista
(minR,maxR)=MinMax(L[int(middle):]).
Al finalizar todos los pasos de recursividad compararemos los valores
obtenidos mediante if’s, el primer if compara si minL<=minR y así almacenar
min=minL de lo contrario se almacena minR, el segundo if compara
maxL>=maxR para almacenar max=maxL de lo contrario almacena maxR;
para finalizar la función retornará min y max.
principal En esta función lo que se hace es crear una lista para después
imprimir el máximo y mínimo valor de la lista mediante un print que manda a
llamar la función previamente descrita:
print(“Los valores son: “, MinMax(lista)).
Cote Valencia Alexis Daniel Gpo1 Práctica 11 Estrategias para la
construcción de algoritmos
Al final del código se manda a llamar la función principal para llevar acabo la
ejecución del programa; pertenece a la categoría divide y vencerás porque, como
se explico anteriormente, trabaja con la lista original creando listas más pequeñas
de la mitad del tamaño de la original y estas listas a su vez se vuelven a dividir por
la mitad hasta el punto en que ya no se pueden dividir y se empieza a resolver el
problema de manera más sencilla, este algoritmo trabaja de manera Top-down para
después ir con Bottom-up y también podemos decir que este algoritmo pertenece a
BackTrack por el hecho de que hace una búsqueda sistemática a través de las
diferentes soluciones posibles (si las primeras dos posiciones una es mayor que
otra), además de que tiene soluciones parciales (los mínimos y máximos van
cambiando) y en el momento que encuentre que un valor es más eficiente al que ya
tiene lo puede cambiar.
Para el correcto funcionamiento de este programa no se espera ningún parámetro
de entrada por parte del usuario y se emplearon las funciones cls junto con pause
para darle mejor presentación al programa.
ACTIVIDAD 10
Merge Sort