Está en la página 1de 5

Carátula para entrega de prácticas

Facultad de Ingeniería Laboratorios de docencia

Laboratorio de Computación
Salas A y B

Profesor: Sáenz García Elba Karen

Asignatura: Estructura de Datos Y Algoritmos 1

Grupo: 4

No de Práctica(s): 11

Integrante(s): Palacios Cacique Esteffany Abigail

Reyes Castillo Christian

Dionicio Juárez Agustín

No. de Equipo de
cómputo empleado:

Semestre: 2 semestre

Fecha de entrega: 29 de octubre 2018

Observaciones:
CALIFICACIÓN: ________________

Introducción:

Python es un lenguaje de programación interpretado cuya filosofía hace hincapié en una sintaxis que
favorezca un código legible.
Se trata de un lenguaje de programación multiparadigma, ya que soporta orientación a objetos, programación
imperativa y, en menor medida, programación funcional. Es un lenguaje interpretado, usa tipado dinámico y es
multiplataforma.
En informática, la búsqueda por fuerza bruta, búsqueda combinatoria, búsqueda exhaustiva o simplemente
fuerza bruta, es una técnica trivial pero a menudo usada, que consiste en enumerar sistemáticamente todos
los posibles candidatos para la solución de un problema, con el fin de chequear si dicho candidato satisface la
solución al mismo.

La búsqueda por fuerza bruta es sencilla de implementar y, siempre que exista, encuentra una solución. Sin
embargo, su coste de ejecución es proporcional al número de soluciones candidatas, el cual es
exponencialmente proporcional al tamaño del problema. Por el contrario, la búsqueda por fuerza bruta se usa
habitualmente cuando el número de soluciones candidatas no es elevado, o bien cuando éste puede reducirse
previamente usando algún otro método heurístico.
Es un método utilizado también cuando es más importante una implementación sencilla que una mayor
rapidez. Este puede ser el caso en aplicaciones críticas donde cualquier error en el algoritmo puede acarrear
serias consecuencias; también es útil como método "base" cuando se desea comparar el desempeño de otros
algoritmos meta heurísticos. La búsqueda de fuerza bruta puede ser vista como el método metaheurístico más
simple.
En la cultura popular, divide y vencerás hace referencia a un refrán que implica resolver un problema difícil,
dividiéndolo en partes más simples tantas veces como sea necesario, hasta que la resolución de las partes se
torna obvia. La solución del problema principal se construye con las soluciones encontradas.
En las ciencias de la computación, el término divide y vencerás (DYV) hace referencia a uno de los más
importantes paradigmas de diseño algorítmico. El método está basado en la resolución recursiva de un
problema dividiéndolo en dos o más subproblemas de igual tipo o similar. El proceso continúa hasta que éstos
llegan a ser lo suficientemente sencillos como para que se resuelvan directamente. Al final, las soluciones a
cada uno de los subproblemas se combinan para dar una solución al problema original.
Esta técnica es la base de los algoritmos eficientes para casi cualquier tipo de problema como, por ejemplo,
algoritmos de ordenamiento (quicksort, mergesort, entre muchos otros), multiplicar números grandes
(Karatsuba), análisis sintácticos (análisis sintáctico top-down) y la transformada discreta de Fourier.
El nombre divide y vencerás también se aplica a veces a algoritmos que reducen cada problema a un único
subproblema, como la búsqueda binaria para encontrar un elemento en una lista ordenada (o su equivalente
en computación numérica, el algoritmo de bisección para búsqueda de raíces). Estos algoritmos pueden ser
implementados más eficientemente que los algoritmos generales de “divide y vencerás”; en particular, si es
usando una serie de recursiones que lo convierten en simples bucles. Bajo esta amplia definición, sin
embargo, cada algoritmo que usa recursión o bucles puede ser tomado como un algoritmo de “divide y
vencerás”. El nombre decremento y vencerás ha sido propuesta para la subclase simple de problemas.
Objetivo:

Utilizar las estrategias de algoritmos ávidos para construir algoritmos.

Aplicar el concepto de recursividad para la solución de problemas.

Desarrollo:

Realizar los programas que se solicitan en las siguientes actividades utilizando python 3.

Actividad 1:

Realizar un programa que permita a una máquina expendedora que tiene n tipos de monedas de cierta
denominación, dar cambio mediante el menor número de monedas posible. Considerar que el número de
monedas es limitado, es decir, se tiene un número concreto de monedas de cada tipo.

Actividad 2:

Realizar un programa que resuelva el problema de la mochila, considerando la siguiente descripción:

Actividad 3:

Implementar funciones de recurrencia de python:

Factorial de un número

Calculo de números de Fibonacci

Exponenciación entera.
Conclusiones:

Reyes Castillo Christian:

Al realizar una práctica nuevamente en el programa de python, me enseño aún más de este lenguaje, ya que
realizamos una serie de Fibonacci, la factorial de un número entre otros que ya fueron un poco más
elaborados, pero con lo aprendido en clase no fue tan difícil, en el de la mochila ya fue un poco más
complicado, aunque lo vimos en clase costo un poco más de trabajo, y el de las monedas también lo vimos en
clase y fue algo sencillo, una buena práctica.

Dionicio Juárez Agustín:

Palacios Cacique Esteffany Abigail:

En esta práctica utilizamos los diferentes métodos de la programación como son la recursividad la cual ayuda
a la resolución de problemas que también se pueden solucionar de forma iterativa, Por otra parte algunos
problemas solo se puede resolver por este tipo de método

También podría gustarte