Vous êtes sur la page 1sur 6

Carátula para entrega de prácticas

Facultad de Ingeniería Laboratorio de docencia

Laboratorios de computación
salas A y B
Profesor: Ing. Jonathan Roberto Torres Castillo

Asignatura: Estructura De Datos Y Algoritmos I

Grupo: 9

No de Práctica(s): 11

Integrante(s): Valderrabano Vega Abraham

Semestre: 2018-II

Fecha de entrega:

Observaciones:

CALIFICACIÓN: _________

1
PRACTICA 11
Estrategias para la construcción de algoritmos
ESTRUCTURAS DE DATOS LINEALES: PILA Y COLA
ESTRUCTURA DE DATOS Y ALGORITMOS I
UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO

Profesor: Ing. Jonathan Roberto Torres Castillo

Número de lista: #40


Correo Electrónico: abraham171270@gmail.com

1. Reglas de las Prácticas de Laboratorio


 Deberá respetar la estructura general del documento proporcionado para la respectiva
práctica y llenar cada una de las secciones que aparecen en él.
 El desarrollo de la práctica deberá ser autentico. Aquellos alumnos que presenten los
mismos cálculos, código fuente, etcétera, se les será anulada inapelablemente la
práctica correspondiente con una calificación de 0.
 Deberá subir el informe y los scripts al sistema Schoology. Los archivos deberán tener
las características descritas en el archivo “Reglas_Laboratorio.pdf” de lo contrario su
calificación será de 0.
 El día de entrega establecido deberá ser respetado por todos los alumnos, la práctica
debe ser terminada parcialmente al finalizar la clase y completada máximo a los 7 días
siguientes a la sesión de laboratorio tiempo en el cual debe subir la práctica al link
correspondiente.
 No se recibirán informes ni actividades si no asiste a la sesión de laboratorio y no
presenta justificación médica, por lo cual no tendrá derecho a la calificación de dicha
práctica y la nota será de 0.
 La inasistencia a 3 sesiones de laboratorio en el semestre será causal de reprobación
de las prácticas y del curso.

2. Objetivos
 Revisar las definiciones, características, procedimientos y ejemplos de las estructuras
lineales Pila y Cola, con la finalidad de comprender sus estructuras e implementarlas
adecuadamente.

3. Introducción
El objetivo de esta guía es aplicar los algoritmos básicos para la solución de problemas.

2
Licencia GPL de GNU
El software presente en esta guía práctica es libre bajo la licencia GPL de
GNU, es decir, se puede modificar y distribuir mientras se mantenga la
licencia GPL. /*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see
<http://www.gnu.org/licenses/>.
*
* Author: Jorge A. Solano
*/

4. Planteamiento del Problema y Desarrollo


A continuación se describen las actividades a realizar para la presente práctica, en cada
apartado debe colocar la descripción, los análisis numéricos y/o los resultados de cada
actividad. El código fuente del programa que permitió solucionar cada actividad debe
colocarse en la sección 5.

4.1. Actividad 1

Búsqueda exhaustiva o fuerza bruta

Técnica de resolución de problemas que consiste en verificar todas las posibles soluciones a un
problema hasta encontrar aquella o aquellas que cumplan con el propósito de resolver el
problema.

Es la forma de aproximación más simple para resolver un problema.

VENTAJAS

 Simplicidad en los algoritmos


 Aplicable a diferentes tipos de problemas

DESVENTAJAS

 Carece de eficiencia en muchos casos.


 Funcional para instancias relativamente pequeñas de los problemas que se resuelven

3
EJEMPLOS

 Buscar los divisores de un número


 Verificar si un número es primo.
 Dado un conjunto de números, encontrar la suma máxima entre ellos
 Dada una cierta longitud y un conjunto de caracteres,
 encontrar un password.
 Búsqueda de algún elemento en un conjunto de datos no ordenado

Top-down y bottom-up
 Se trata de técnicas de diseño de algoritmos que especifican el enfoque que se tiene para
la solución de un problema.
TOP-DOWN
 Consiste en establecer una serie de niveles de mayor a menor complejidad que den
solución a un problema.
 Se debe establecer una relación entre las etapas de la solución del problema de forma que
una etapa jerárquica y su inmediato inferior se relacionen mediante entradas y salidasde
información.

La utilización de la técnica de diseño Top-Down tiene los


siguientes objetivos básicos:
 Simplificación del problema y de los subprogramas de cada descomposición.
 Las diferentes partes del problema pueden ser programadas de modo independiente e
incluso por diferentes personas.
 El programa final queda estructurado en forma de bloque o módulos lo que hace más
sencilla su lectura y mantenimiento.

BOTTOM-UP
 Consiste en una estrategia de diseño que parte desde los módulos particulares o
específicos que son parte de la solución general de un problema.
 Normalmente esta estrategia se utiliza cuando ya se elaboró el diseño de una solución y se
va a realizar la implementación de la misma.
 Si el diseño de la solución se realiza siguiendo este modelo, puede ser complicado ya que
no se tiene un panorama general del problema completo.

Algoritmos Ávidos o voraces (greedy)


 Un algoritmo ávido es aquel que, para resolver un determinado problema, elige la mejor
opción en cada paso local (de manera directa) con la esperanza de llegar a una solución
general óptima.
 Este esquema algorítmico plantea pocas dificultades aldiseñar y comprobar su
funcionamiento
 Consiste en tomar las decisiones sucesivamente, de modo que cada decisión individual sea
la mejor de acuerdo con algún criterio limitado “a corto plazo” cuya evaluación no sea
demasiado costosa.
 Una vez tomada una decisión, no se podrá revertir, ni siquiera si más adelante se hace
obvio que no fue una buena decisión.

4
De manera general, es posible diseñar un algoritmo “greedy” de la siguiente manera:
 1.- Enunciar el problema de optimización de tal forma que, cuando se toma una primera
decisión o se resuelve en una primera etapa, esto resulta en un subproblema a resolver.
 2.- Mostrar que siempre hay una solución al problema original a partir de la decisión que
tome el algoritmo “greedy”.
 3.- Demostrar que el subproblema obtenido a partir de la primera solución proporcionada
con el algoritmo “greedy” aún tiene una solución al problema (dicha solución también se
obtiene con un algoritmo greedy).

 La estrategia en la que trabaja un algoritmo greedy es de tipo top-down.


 Los algoritmos de tipo “GREEDY” no necesariamente obtienen la solución óptima.
 Algunos ejemplos típicos de problemas conocidos que se resuelven utilizando un algoritmo
ávido son:
 Problema del cambio de monedas.
 Problema de la mochila.

 Divide y vencerás
 Es una técnica que suele ser considerada como una estrategia general de resolver
problemas.
 En el campo de los algoritmos consiste en resolver un problema a partir de la solución de
sub-problemas del mismo tipo, pero de menor tamaño.
 Si los sub-problemas son relativamente grandes, se aplica de nuevo la técnica hasta
alcanzar problemas suficientemente pequeños para resolverlos directamente
La técnica consiste a grandes rasgos en los siguientes pasos:
 1.- Se debe plantear el problema de tal forma que se pueda descomponer en k sub-
problemas del mismo tipo, pero de menor tamaño. A esta parte del procedimiento se le
conoce como división.
 2.- Se deben resolver los k problemas de manera independiente.
 3.- Combinar las soluciones de cada uno de los k problemas para construir la solución al
problema original.
 El resultado del diseño de estos algoritmos suele ser simple y elegante, lo que da lugar a
una mejor legibilidad, mayor facilidad en la depuración y análisis del algoritmo.
 Los diseños recursivos normalmente tardan una mayor cantidad de tiempo en su ejecución
que los iterativos. El uso de la recursividad se puede volver muy complejo.
 Desde un punto de vista de la eficiencia de los algoritmos Divide y Vencerás, es importante
conseguir que los subproblemas sean independientes, es decir, que no exista traslape
entre ellos.
 Otra consideración importante a la hora de diseñar algoritmos Divide y Vencerás es el
reparto de la carga entre los sub-problemas, puesto que es importante que la división en
sub-problemas se haga de la forma más equilibrada posible.

5
5. Conclusiones
Las técnicas de programación nos sirven para tener una forma mejor de resolver los
problemas orientados a las carteristas que nos permiten diseñar el diseño de algoritmos
capaces para los requerimientos de la vida.

6. Referencias
[1] GARCÍA CANO, Edgar, SOLANO GÁLVEZ, Jorge, Guía práctica de estudio #11
ESTRATEGIAS EN LA CONSTRUCCION DE ALGORITMOS, Facultad de
ingeniería, UNAM.

[2] CORMEN, Thomas, LEISERSON, Charles, et al. Introduction to Algorithms 3rd


edition MA, USA The MIT Press, 2009

Vous aimerez peut-être aussi