viernes, 18 de enero de 2019

¿Qué es un Algoritmo? - Del mundo real a la solución por computadora.

Hola amigos de Internet. Mi nombre es Luis, y les doy la bienvenida a Mi Diario Python.
Como programadores e informáticos, siempre hemos escuchado la palabra Algoritmo. Sabemos que hay algoritmo de ordenación, algoritmos criptográficos, algoritmos de búsqueda, y más. En este blog les he enseñado a codificar esos algoritmos en Python.
Pero… ¿Qué es exactamente un algoritmo? ¿Que características debe tener un algoritmo? ¿Para que utilizarlos?. En este articulo responderemos estas y más preguntas.
Prepárate, sírvete una taza de café y toma nota. Hoy hablaremos de un tema que todo informático debe manejar a la perfección. La razón por la que la informática existe. La resolución de problemas del mundo real, por computadora.

La informática llegó para ayudar

Resultado de imagen para algoritmos
La Informática nace bajo la idea de ayudar al hombre en aquellos cálculos rutinarios, donde frecuentemente existe una repetición de tareas. Desde cálculos aritméticos (suma, resta, multiplicación, división), hasta el minado y procesamiento de grandes cantidades de datos.
Existen diversos conceptos de Informática. Pero nos quedaremos con el siguiente:
Las Ciencias de la Computación o Informática, como se le llama en
algunos países hispanoamericanos, es la disciplina que busca
establecer una base científica para diversos temas, como el diseño de
computadoras, la programación de computadoras, el proceso de
información, la elaboración de algoritmos para resolver problemas y el
proceso algorítmico en sí.
Muy bien, sabemos que informática nos ahorra mucho tiempo resolviendo problemas en un plazo de tiempo muy corto. Pero… ¿Como lo hace? ¿Como una computadora es capaz de procesar un problema del mundo real y resolverlo? ¿Que debe hacer un programador para que una computadora logre esto?. Veamos.

Informatizar la resolución

El proceso de informatizar la resolución de problemas del mundo real, tales como resolver una ecuación matemática conlleva una serie de pasos que debemos seguir para obtener una respuesta encuadrada a los datos provistos.
La siguiente imagen nos muestra el proceso para resolver un problema del mundo real:

1- Como primer paso se deberá conocer las especificaciones del problema, es decir, analizar y determinar en forma clara y concreta el objetivo que se desea. Analizar los datos que se disponen y cuales son los resultados que se desean.
2- Una vez que se conoce el problema en detalle, se puede intentar realizar un modelo del mismo, es decir, abstraer el problema tratando de encontrar los
aspectos principales que se pueden resolver, los datos que se han de procesar y el contexto del problema, simplificando su expresión.
3- Disponiendo de un panorama más claro del problema, sus datos y resultados, se puede escribir una serie de acciones que seguidas paso a paso resuelvan el problema. Esto es el algoritmo.
4- se traduce el algoritmo, mediante un lenguaje de programación, para convertirlo en un programa que podrá ser interpretado por la computadora para su ejecución solución en forma rápida y eficaz.

Del mundo real a la solución por computadora

Existen cinco etapas a tener en cuenta para resolver un problema que luego será ejecutado por una computadora en forma rápida y eficaz. Esas etapas son:
  1. Análisis del problema, se formula y analiza el problema en su contexto del mundo real.
    COMPRENDER EL PROBLEMA.
  2. Diseño de una solución, se elige una metodología para hallar la solución del problema. TRAZAR UN PLAN PARA RESOLVERLO.
  3. Escritura de un algoritmo, se expresa la metodología del punto anterior de forma tal que pueda ser interpretado por el procesador que lo va a ejecutar. ESCRIBIR EL ALGORITMO.
  4. Codificación del algoritmo. Un algoritmo es una especificación simbólica que debe traducirse a un programa a partir del conocimiento de un lenguaje de programación para poder ser ejecutado por la computadora. ESCRIBIR EL PROGRAMA O CODIFICAR EL ALGORITMO.
  5. Ejecución y validación del algoritmo-programa. La etapa siguiente a escribir el programa, es la verificación de funcionamiento del mismo, es decir, ver si el programa conduce al resultado deseado con los datos dados del mundo real. PROBAR EL PROGRAMA.
En la primera etapa debemos analizar el problema en su contexto del mundo real. En la segunda etapa debemos elegir una metodología para hallar la solución del problema, como por ejemplo, una formula para resolver una ecuación. En la tercera etapa debemos expresar la metodología de la etapa dos, de manera que pueda ser interpretada por el procesador que lo va a ejecutar. En la cuarta etapa procedemos a codificar el algoritmo, es decir, traducirlo a un lenguaje de programación que la computadora pueda entender y ejecutar. Por ultimo, la prueba del programa, verificar que el programa nos devuelva los resultados esperados.
Para encarar la resolución de un problema por computadora hay que considerar como punto de partida que el procesamiento de la información lleva en sí el hecho de tomar datos, elaborarlos y emitir resultados de acuerdo a dichos datos y a la lógica del proceso que se está ejecutando en ese momento. Por lo tanto, se puede pensar en un modelo computacional compuesto de tres
partes: ENTRADA, PROCESO y SALIDA.
Por ejemplo: Supongamos que queremos realizar un algoritmo para calcular el cuadrado de un binomio de dos números, a y b.
Entradaa, b
Proceso(a + b)^2 = a^2+2ab+b^2
Salida(a + b)^2
Creo que con este ejemplo, se logra entender los procesos computacionales por los que pasa la información, para luego devolvernos un resultado.
Muy bien, sabemos que la primera etapa para resolver un problema, es analizar el problema a profundidad. Luego buscar una metodología para resolver el problema. Como la formula que he utilizado para el cuadrado de binomio.
La tercera etapa es el desarrollo del algoritmo. Así que continuemos:

¿Qué es un algoritmo?

Nos quedaremos con el siguiente concepto de algoritmo:
Un algoritmo es una forma de describir la solución de un problema, explicando paso a paso
como se debe proceder para llegar a una respuesta encuadrada a los datos disponibles, en un
tiempo finito.
Debemos saber que escribir algoritmos, es un arte. Por lo que existe una gran variedad de algoritmo que resuelven el mismo problema. Cada persona lo escribe a su estilo. Cada algoritmo tiene su sello propio.
Las características de un algoritmo son las siguiente:
  1. Un algoritmo debe ser preciso, es decir, debe indicar claramente, sin ambigüedades, cada uno de los pasos a seguir para conseguir el objetivo propuesto.
  2. Un algoritmo debe estar exacto, es decir, que si se sigue el algoritmo varias veces con el
    mismo juego de datos, los resultados obtenidos deben ser los mismos.
  3. Un algoritmo debe ser finito, de tiempo finito, su ejecución debe concluir en algún
    momento.
Un algoritmo debe ser preciso. Es la principal característica. Debe señalar cada paso que deba realizar para resolver el problema.
Por ejemplo, una receta de cocina, es un ejemplo de los algoritmos que podemos encontrar en nuestra vida cotidiana. En en la receta se especifica todo lo que necesitas para cocinar, y te indica cada uno de los pasos, desde cortar los vegetales, hasta los minutos que debe pasar en el horno. Bueno, no soy un chef experto, pero creo que se entendió el punto al que quiero llegar.

Nuestro primer algoritmo

Ahora sí, es momento de escribir nuestro algoritmo.
Para este articulo utilizaremos un ejemplo muy sencillo. Escribiremos un algoritmo para hacer lo siguiente:
Calcular el promedio de un conjunto de números positivos, suponiendo que los números ingresan de a uno por teclado. Un valor cero como entrada indicará que finalizó la serie de números positivos.
Iremos haciendo esto por etapas. Comencemos…

Etapa 1. Análisis del problema:

Muy bien. Queremos calcular el promedio (o media aritmética, como lo conozcas) de un conjunto de números positivos, que ingresan de uno a uno por teclado. Y que al ingresarse un valor 0, se termine la serie de números positivos. Y que al mismo tiempo se devuelva un resultado.
¿Que datos se necesitan para calcular el promedio? Los únicos datos que necesitaremos, serán el conjunto de números positivos que se ingresaran uno a uno.

Etapa 2. Diseñando una solución:

Calcular el promedio de un conjunto de números, es muy fácil.
Hay una formula que nos dice que el promedio de un conjunto de numeros es igual a la suma de n valores, divido entre n(cantidad de elementos).
Veamos un ejemplo para entenderlo con mayor claridad.
Supongamos que tenemos las siguiente notas de un alumno: 6.7, 5.9, 6.4, 6.1. Para calcular el promedio de estas notas, debemos hacer lo siguiente:
Sumar todos los valores: 6.7 + 5.9 + 6.4 + 6.1 = 25.1. Ahora para calcular el promedio, dividimos el resultado de la suma (25.1) entre la cantidad de valores, que en este caso son 4: 25.1 / 4 = 6.275. Y ese seria nuestro resultado.
Muy bien, hemos encontrado la forma de resolver el problema. Es tiempo de escribir nuestro algoritmo.

Etapa 3. Escribir el algoritmo:

Ahora te estarás preguntando ¿Como lo escribo?. Hay diversas maneras de escribir y representar algoritmos. Una de ellas es haciendo a través de “Diagramas de Flujo”.
Diagrama de Flujo: es un diagrama que utiliza figuras geométricas unidas por flechas para indicar la secuencia
en que deben ejecutarse las acciones. Los símbolos utilizados han sido normalizados por el Instituto Norteamericano de Normalización (ANSI).
Si utilizamos el diagrama de flujo para representar nuestro algoritmo, quedaría de la siguiente manera:
Y de esa manera quedaría nuestro algoritmo. Que te parece si le damos un repaso:
Como siempre, comenzamos por el Inicio. Luego declaramos una variables llamada Cont con valor 0. La variable Cont aumentara +1 cada vez que se ingrese un valor. De esta manera, Cont llevara la cuenta de la cantidad de valores que se ingresen (necesario para calcular el promedio).
Luego tenemos la variable Suma la cual iniciara con valor 0. En la variable suma (sí, adivinaste), iremos sumando todos los elementos que se ingresen.
Luego de declarar las variables, empieza un bucle. Luego se solicita un numero el cual se guardara en la variable Num. Se le suma 1 a la variable Cont. Luego se le suma el numero ingresado Num al valor de la variable Suma. Ahora una condición. Sí Num es diferente de 0, entonces el bucle se vuelve a repetir. De lo contrario, si Num es igual a 0, entonces el bucle termina. Si el bucle termina, entonce procedemos a calcular el promedio de los valores ingresado. Declaramos una variables Promedio la cual tiene como valor, la división de Suma entre Cont. Mostramos el resultado, y finalizamos.
El diagrama de flujo es muy intuitivo. Muy fácil de comprender.
El Diagrama de Flujo no es la única manera de representar algoritmos. También tenemos el pseudocódigo.
Un pseudocódigo es un código no convencional o lenguaje no establecido universalmente.
Concretamente un pseudocódigo es un lenguaje formado por palabras comunes del idioma que elija el que lo use, en nuestro caso el español. Por lo cual el uso de tal tipo de lenguaje hace que la escritura de los algoritmos sea relativamente fácil.
Nuestro algoritmo en pseudocódigo quedaría así:

Etapa 4. Codificación del algoritmo:

Es momento de nuestra parte favorita. Codificar el algoritmo. Traducirlo a un lenguaje de programación.
Muy bien, adivinaste, lo haremos en Python. La verdad, no tengo mucho explicar con respecto a esta parte. Teniendo el diagrama de flujo o pseudocódigo de un algoritmo, es muy fácil codificarlo. Son cosas muy sencilla. Variables y bucles. Veamos como quedaría nuestro algoritmo codificado en Python.
# Calcular Promedio

Cont = 0
Suma = 0

while True:
 Num = float(input("Ingresar numero: "))
 if Num == 0:
  break
 Cont = Cont + 1
 Suma = Suma + Num

Promedio = Suma /  Cont
print("Resultado: %s" % Promedio)
Ingresar numero: 6.7
Ingresar numero: 5.9
Ingresar numero: 6.4
Ingresar numero: 6.1
Ingresar numero: 0
Resultado: 6.275
Perfecto, quedo excelente.
Vamos, te invito a que realices tus propios algoritmos. Que resuelvas tus propios problemas, dándoles tu propia solución.
¿Alguna duda? ¿Alguna sugerencia? Déjanos tu comentario, y con gusto te responderemos.
Sin más nada que decir, mi nombre es Luis, y fue placer compartir mis conocimientos con todos ustedes :D.

4 comentarios :
Write comentarios
  1. maravillosa publicasion por que esto de los argoritmos es bastante complicado y con el factor agregado que hay que tener mucha logica cosa que yo no poseo pero me saticfase esta publcasion

    ResponderEliminar
  2. Excelente articulo, una forma muy fácil y particular de explicar y resaltar la lógica de trabajo al momento de ingresar al gran mundo de la informática y del desarrollo.

    ResponderEliminar
    Respuestas
    1. Muchas gracias Octavio. Sí, es una forma fácil de explicarlo. De esta manera quiero hacerle saber a las personas que el mundo de la informática no es solo para "genios". Solo debemos verlo con un poco de lógica.

      Eliminar
  3. Muy buena explicación paso a paso de las etapas para llegar a la resolución de un problema por medio de los algoritmos!!! Excelente!!! Gracias

    ResponderEliminar

Tu comentario es importante y nos motiva a seguir escribiendo...

Powered by Blogger .