Diseño de Algoritmos

Unidad de Apoyo para el Aprendizaje

Iniciar

Introducción


En el momento que se nos presenta un problema tratamos de solucionarlo lo más pronto posible, estudiando sus causas para actuar correctamente, tomando en cuenta que un algoritmo es una serie de pasos bien definidos que ayudan a llegar a la solución de algún problema. Es así como, mediante las diferentes técnicas de diseño de algoritmos, construimos soluciones que satisfagan los requerimientos del problema. Por eso la importancia de este tema, para identificar eficazmente todos los elementos posibles y así dar un resultado óptimo.

Si te interesa continuar con el tema te invito a seguir estudiando.



Mano de una persona dibujando con un plumón un diagrama de flujo

Geralt. (s. f.). Diagrama de flujo [fotografía]. Tomada de https://pixabay.com/es/marca-marcador-mano-deja-516277/



El estudio de este tema te permitirá:

Identificar las diferentes técnicas de diseño de un algoritmo para solucionar un problema, a través del estudio de sus propiedades y representación gráfica.

Algoritmo


Un algoritmo es un conjunto detallado y lógico de pasos para alcanzar un objetivo o resolver un problema; por ejemplo, el instructivo para armar un modelo de avión a escala. Cualquier persona, si atiende de forma estricta la secuencia de los pasos, llegará al mismo resultado. La construcción de algoritmos se basa en la abstracción de las características del problema, a través de un proceso de análisis que permitirá seguir con el diseño de una solución fundamentada en modelos, los cuales ven su representación tangible en el proceso de implementación del algoritmo.

Técnicas de diseño de algoritmos

Existen diferentes técnicas de diseño de algoritmos para construir soluciones que satisfagan los requerimientos de los problemas, entre las que destacan las siguientes.

Algoritmos voraces

Suelen utilizarse en la solución de problemas de optimización y se distinguen porque son…



Sencillos Miopes Eficientes
En cuanto a su diseño y codificación. Toman decisiones con la información que tienen disponible de forma inmediata, sin tener en cuenta sus efectos futuros. Dan una solución rápida al problema (aunque ésta no sea siempre la mejor).

Tabla sobre la distinción de los algoritmos voraces que se utilizan en la solución de problemas de optimización



Tienen las siguientes propiedades:

•Tratan de resolver problemas de forma óptima.
•Disponen de un conjunto o lista de candidatos.

A medida que avanza el algoritmo se acumulan dos conjuntos:

•Candidatos considerados y seleccionados.
•Candidatos considerados y rechazados.

Los algoritmos voraces suelen ser bastante simples. Se emplean sobre todo para resolver problemas de optimización; por ejemplo, encontrar la secuencia óptima para procesar un conjunto de tareas por una computadora; hallar el camino mínimo de un grafo, etcétera.
Por lo regular, intervienen estos elementos:

Esquema gráfico de los elementos que intervienen en los algoritmos


Divide y vencerás

Otra técnica común en el diseño de algoritmos es divide y vencerás, que consta de dos partes:



Dividir

Los problemas más pequeños se resuelven recursivamente (excepto, por supuesto, los casos base).

Vencer

La solución del problema original se forma, entonces, a partir de las soluciones de los subproblemas.



Las rutinas en las cuales el texto contiene al menos dos llamadas recursivas se denominan algoritmos de divide y vencerás; no así aquéllas cuyo texto sólo comprende una.

La idea de la técnica divide y vencerás es dividir un problema en subproblemas del mismo tipo y, aproximadamente, del mismo tamaño; resolver los subproblemas recursivamente y combinar la solución de los subproblemas para dar una solución al problema original.

La recursión finaliza cuando el problema es pequeño y la solución fácil de construir directamente.

Programación dinámica

Inventada por el matemático Richard Bellman en 1953, es un método para reducir el tiempo de ejecución de un algoritmo mediante la utilización de subproblemas superpuestos y subestructuras óptimas. Una subestructura óptima significa que soluciones óptimas de subproblemas pueden ser usadas para encontrar las soluciones óptimas del problema en su conjunto.

En general, se pueden resolver problemas con subestructuras óptimas siguiendo estos pasos:



 Interacción entre los procesos, la estructura de memoria y los archivos.


Los subproblemas se resuelven, a su vez, dividiéndolos en subproblemas más pequeños, hasta alcanzar el caso fácil, donde la solución al problema es trivial.



Diagramas de flujo


Los diagramas de flujo son la representación gráfica de los algoritmos. Elaborarlos implica diseñar un diagrama de bloque que contenga un bosquejo general del algoritmo, y con base en éste proceder a su ejecución con todos los detalles necesarios. Reglas para construir diagramas de flujo. Pulsa en las flechas o en los conceptos para navegar por la información.





Terminado el diagrama de flujo se realiza la prueba de escritorio; es decir, se le da un seguimiento manual al algoritmo, llevando el control de variables y resultados de impresión de forma tabular.

Ventajas y desventajas

Ventajas:

1. Programas bien documentados.
2. Cada gráfico se codificará como una instrucción de un programa, realizando una conversión sencilla y eficaz.
3. Facilita la depuración lógica de errores.
4. Se simplifica su análisis al facilitar la comprensión de las interrelaciones.

Desventajas:

1. Su elaboración demanda varias pruebas en borrador.
2. Los programas muy grandes requieren diagramas laboriosos y complejos.
3. Falta de normatividad en su elaboración, lo que complica su desarrollo.

Algunos gráficos usados en los diagramas:



 Interacción entre los procesos, la estructura de memoria y los archivos.


A continuación se presenta un ejemplo de diagrama de flujo.

Algoritmo: imprimir los factoriales para los números del 1 al 10.



 Interacción entre los procesos, la estructura de memoria y los archivos.


Puede haber varias soluciones, pero una será la óptima.

Las estructuras básicas de un algoritmo están presentes en el modelado de soluciones. En este tema se estudiaron técnicas de diseño de algoritmos para construir soluciones que satisfagan los requerimientos de los problemas, como algoritmos voraces, divide y vencerás, programación dinámica y la representación gráfica de los algoritmos que son los diagramas de flujo.

Así, se ha mostrado un panorama general del diseño de algoritmos.

Actividad. Exponiendo soluciones

En el momento que se presenta una dificultad en nuestra vida intentamos darle la mejor solución posible. Identificando la causa que la originó se puede explicar de una forma gráfica, para así poder comprenderla totalmente. Es por esto que esta actividad te ayudará a reforzar los conceptos de diseño en la construcción de algoritmos.

Autoevaluación. El diseño de algoritmos

Suelen utilizarse en la solución de problemas diversos métodos posibles que nos lleven a identificar las causas que los originaron, para así modelar un diseño gráfico que nos ayude a comprender de mejor forma la solución que daremos. En la siguiente autoevaluación podrás identificar tu nivel de comprensión del tema.

Fuentes de información

Básicas

SUAyED. (2016). Análisis, diseño e implantación de algoritmos. Apunte electrónico [Versión electrónica]. México: UNAM. Consultado el 21 de agosto de 2017 de http://fcasua.contad.unam.mx/apuntes/interiores/docs/20181/informatica/1/LI_1164_06097_A_Analisis_Diseno_Implantacion_Algoritmos_Plan2016.pdf

SUAyED. (2016). Análisis, diseño e implantación de algoritmos. Cuaderno de actividades [Versión electrónica]. México: UNAM. Consultado el 21 de agosto de 2017 de http://fcasua.contad.unam.mx/apuntes/interiores/docs/20181/informatica/1/LI_1164_06047_C_Analisis_Diseno_Implantacion_Algoritmos_Plan2016.pdf

Complementarias

Cairó, O. (2006). Fundamentos de programación: piensa en C. México: Pearson Educación.

García, J. B. y Laza, R. (2008). Metodología y tecnología de la programación. Madrid: Pearson/Prentice Hall.

Gelder, B. (2003). Algoritmos computacionales (3.ª ed.). México: Thompson.

Cómo citar

Texto correspondiente a esta sección.