Algoritmo

  • Por
Qué es un algoritmo, partes de un algoritmo, características y ejemplos de algoritmos, así como programas en el lenguaje Javascript.

Este es el resumen de la primera parte de la charla dedicada a los algoritmos, realizada durante el Curso Gratuito de los Fundamentos de la Programación, en EscuelaIT, la comunidad y plataforma para la formación asistida de DesarrolloWeb.com. Este tema de los algoritmos se vio en la segunda sesión del curso. En la primera tuvimos una Introducción a los Lenguajes de Programación en plan general y una descripción detallada de los Tipos de Datos.

La clase fue impartida por Miguel Angel Alvarez, fundador de DesarrolloWeb.com y EscuelaIT. En este artículo encontrarás un resumen de la exposición junto con el vídeo de la clase grabada y las diapositivas que se usaron para la presentación, embebidos en el propio artículo al final del presente texto.

Nota: Al publicar este contenido en DesarrolloWeb.com hemos dividido la sesión de los algoritmos en dos partes, para que puedas digerir mejor toda la información, aunque las dos partes se incluyeron en la misma clase. La primera parte está más orientada a los conceptos y características de algoritmos, con varios ejemplos sencillos, y la segunda parte más dedicada a presentar un par de ejemplos de algoritmos algo más complejos que nos ayudarán a entender cómo se hacen los programas en un lenguaje de programación como Javascript.

Concepto de Algoritmo

El algoritmo es algo que forma parte de nuestro día a día, en realidad es un concepto tan común que resulta hasta raro que, muchos de nosotros, solo lo conozcamos cuando nos ponemos a estudiar programación.

Comencemos leyendo la definición formal a ver si lo entendemos bien:

Algoritmo es un conjunto ordenado y finito de operaciones que permite hallar la solución a un problema.

Como detalle fíjate que no necesitas acudir a un libro de programación para conocer la palabra algoritmo, pues como decía es algo que cualquiera de nosotros hace en la vida normal. Ésta que está aquí es la definición de la Real Academia de la Lengua.

En otras palabras un algoritmo es la descripción de un proceso o una serie de pasos que tenemos que dar para conseguir alguna cosa.

Existen algoritmos en nuestro día a día a montones, de hecho nos pasamos el día ejecutando algoritmos.

  • Preparar café
  • Tomar un baño
  • Hacer la cama
  • ...

Son operaciones tan habituales y tan simples que casi siempre obviamos que exista un algoritmo definido para ello. Aunque no todos los algoritmos son tan sencillos.

Un algoritmo se define mediante la especificación de una serie de pasos, como en este ejemplo. Beber un vaso de agua:

  • Saco un vaso del armario
  • Saco la botella de agua de la nevera
  • Lleno el vaso
  • Aproximo el vaso a mi boca
  • Trago el líquido

Como podéis ver, no hace falta saber programación para diseñar un algoritmo. Entonces ¿Por qué es importante?

Lo veremos claro enseguida, pero antes os formularé con otra pregunta ¿Habéis oído la frase "Los ordenadores son tontos"? ¿Estáis de acuerdo?

Yo no estoy totalmente de acuerdo con esa frase. Pensar en todo lo que se puede hacer con un ordenador, trabajos digitales con programas como Photoshop, Películas increíbles y de un realismo acojonante hechas con computador, juegos, en 2D y 3D increíbles, o incluso la inteligencia artificial desarrollada en ellos. ¿Alguien ha intentado jugar contra la máquina en uno de esos juegos de fútbol actuales?

Cuando veo las cosas que se pueden hacer con ordenador me hace pensar que es muy difícil que algo "tonto" consiga resultados tan impresionantes. Pero eso de que los ordenadores son tontos se dice porque a ellos todo les debe ser explicado. El ordenador es un conjunto de cables y circuitos que, en principio, no sabe hacer nada a no ser que creemos un programa para ello. En los programas necesitamos decirle a la máquina todos y cada uno de los pasos que debe realizar para completar nuestro objetivo. ¿Y qué es eso? no es más que la definición de algoritmo.

Qué es un programa

Ahora, para ahondar en el concepto de algoritmo, debe quedar claro que éste es un paso previo a escribir código. Para escribir un programa antes debo pensar en el algoritmo que resuelve mi necesidad. El programa viene después del algoritmo: es la expresión de un algoritmo en un lenguaje de programación.

Cómo se expresan algoritmos

Existen muchos modos de expresar algoritmos. Por ejemplo con palabras. Ya hemos expresado un algoritmo con palabras antes cuando pensamos en las acciones de beber un vaso de agua. Pero también se pueden expresar con:

Aunque los diagramas de flujo o el pseudocódigo son útiles porque nos permiten un paso intermedio entre los algoritmos expresados por palabras y el código fuente de los programas, no los vamos a ver de momento. Dado que todos sabemos escribir, por ahora vamos a limitarnos a escribir los algoritmos con palabras.

Ejemplos de algoritmos y programas

En este punto en el vídeo se vieron un par de ejemplos de algoritmos expresados con palabras y sus correspondientes programas en el lenguaje Javascript.

  • Perímetro de un rectángulo
  • Media

En resumen "Programar es escribir algoritmos en un lenguaje que entienda la máquina" ¿Qué os parece esa frase? ¿Opináis que es correcta?

Estos programas que hemos visto sin duda ilustran bien esa frase, pero pensar que cuando hacéis un programa grande (un juego, un programa de gestión), entran en juego cientos o miles de algoritmos distintos y como programadores debemos no solo escribirlos, sino hacer que se comporten bien los unos con los otros, se coordinen, comuniquen, compartan información, respondan a las acciones del usuario, etc, etc.

Por tanto, podríamos decir que programar es mucho más que escribir algoritmos en un lenguaje de programación.

Fases para resolver un problema

Ya las hemos visto de manera implícita en el bloque anterior de esta clase, pero en resumen: Partimos de un problema, diseñamos un algoritmo y escribimos un programa. Pero en esas fases se encuentran implícitas muchas acciones que deben ser realizadas. Por ejemplo:

1. Identificación del problema
2. Análisis
3. Diseño del algoritmo
4. Programación del algoritmo
5. Ejecución y validación del funcionamiento

Muchos de nosotros pensamos que programar es simplemente escribir el código en un lenguaje de programación (paso marcado con 4 en el listado anterior), pero existen diversos pasos antes y después de codificar. Programar abarcan todos esos pasos.

Partes de un algoritmo

En esta parte de la clase se explicaron las partes de un algoritmo, junto con diversos ejemplos para tratar de identificarlas ya en el código Javascript.

  • Entrada de datos
  • Procesamiento de los datos
  • Salida de los resultados

Características de un algoritmo

Estas son las características que debe tener un algoritmo. Algunas de ellas ya las hemos mencionado. Te darás cuenta que la mayoría son de sentido común.

Estar bien detallado:
No nos olvidemos que a los ordenadores hay que darles todos los pasos, uno a uno, sin olvidar u obviar ninguno de ellos, porque por si solos no son capaces de entender nada.

Estar bien ordenado:
Lógicamente, un algoritmo tiene unos pasos a ser realizados en una secuencia. Pensemos en el algoritmo de beber agua. ¿Qué os parece si después de sacar el vaso del armario de la cocina me lo llevo directamente a la boca para beber?

Tener un principio y un fin:
Tenemos que empezar por algún lugar y terminar en un número finito de pasos, si no, no es un algoritmo. Si nunca acaba nuestro proceso soy incapaz de llegar al final y por tanto no obtengo el resultado deseado, con lo que no se cumple la definición de algoritmo.

Ser fiable:
Este punto incluye muchas cosas, como que el algoritmo resuelva los problemas sin errores y también que una misma entrada de datos produzca una misma salida. Si estamos haciendo el algoritmo del área de un cuadrado y para un cuadrado de 2 metros una vez calculamos el área como 2 metros cuadrados y otras veces como 4 metros cuadrados, habrá algo que hemos hecho mal.

Conclusión, diapositivas y grabación de la clase

Los algoritmos son un campo muy bonito de la informática y nos permiten pensar las cosas tal como se las debemos de expresar a los ordenadores. Pensar en términos de algoritmo nos ayudará a tener mayor facilidad para llevar a código cualquier propósito que tengamos.

Para acabar, os dejamos las diapositivas de esta charla:

A continuación podrás ver el vídeo de la clase de algoritmos, recordando que este vídeo lo hemos dividido en dos partes, en esta más enfocada a conocer el concepto de algoritmo y sus características.

Esta clase de los algoritmos la encuentras en audio, descargable, para poder escucharla en cualquier momento y en cualquier lugar.