sábado, 24 de agosto de 2013

¿Qué es un algoritmo?

La Real Academia Española define la palabra algoritmo como conjunto ordenado y finito de operaciones que permite hallar la solución de un problema. Aunque quizás no seamos conscientes de ello, es muy normal que nos ayudemos de algoritmos en nuestra vida cotidiana, y no sólo cuando utilizamos ordenadores o realizamos cálculos matemáticos. Por ejemplo, cuando compramos una estantería de bajo coste, de esas de móntela usted mismo, junto con las tablas de madera encontramos un folleto con instrucciones, o mejor dicho con un algoritmo, que nos indica cómo montarla; cuando nos subimos en nuestro coche seguimos un algoritmo preciso que nos permite conducir (introducir la llave, girarla a la posición de contacto, volverla a girar hasta la posición de arranque, soltar la llave cuando el motor arranque, pisar el embrague, introducir la marcha primera, etc); o cuando invitamos a unos amigos a cenar a casa y queremos sorprenderlos con un menú especial, consultamos nuestro libro de recetas de cocina, que en definitiva no es otra cosa que un libro lleno de algoritmos culinarios.
Veamos uno de estos ejemplos con más detalle. Imaginemos que queremos hacer una tortilla de patatas pero, como nos ha pasado a todos en algún momento de nuestra vida, no sabemos cómo se hace. Así que cogemos nuestro libro de recetas de cocina para hijos recién emancipados, y buscamos la receta correspondiente a la tortilla. Seguramente el libro encontraremos algo parecido a:

Trocear las patatas en taquitos de medio centímetro cuadrado, y freirlas en una sartén con aceite abundante y no muy caliente. Al poco rato, añadir la cebolla y dejar que se fría junto con las patatas. En un cuenco batimos los huevos, le echamos sal, y añadimos las patatas y cebolla ya fritas, mezclándolo todo bien. Dejamos un poco de aceite en la sartén y echamos la mezcla. Esperamos a que se cuaje un poco, le damos la vuelta, y la dejamos a fuego lento hasta que termine de cuajar.

Evidentemente el párrafo anterior, aunque resulta fácil de entender para cualquier ser humano, es totalmente incomprensible para un ordenador. Podríamos reescribir la receta de manera algo más formal y precisa, intentando darle apariencia de programa de ordenador (véase el "algoritmo" de más abajo), pero aun así seguiría siendo un galimatías ininteligible para las máquinas. De hecho, aun contando con instrucciones tan precisas de cómo se hace una tortilla de patatas, es normal que a cada uno de nosotros nos salgan tortillas completamente diferentes (yo personalmente, aun no consigo entender qué hace mi mujer para que a ella le salgan las tortillas mucho más ricas que a mi). El problema es que nuestro algoritmo “Tortilla de Patatas” contiene todavía muchos elementos que, o bien tienen interpretaciones subjetivas (¿a qué temperatura se entiende que el aceite no está muy caliente?), o bien están descritos de manera demasiado vaga (¿qué se entiende por cuajar?), y por tanto, no son directamente interpretables por un ordenador. Las recetas, tal y como nos las encontramos en los libros de cocina, no entrarían dentro de lo que en informática se conoce como procedimientos computacionalmente bien definidos, y por tanto, no son directamente interpretables por los ordenadores. Los algoritmos utilizados en informática tienen que ser bastante más precisos que nuestro ejemplo de la tortilla, y basarse en pasitos mucho más pequeños.
1  Cortar patatas en tacos
2  Calentar aceite en sartén
3  Añadir patatas a sartén
4  Añadir cebolla a sartén
5  Freir patatas y cebolla
6  Batir huevos en cuenco
7  Añadir patatas y cebolla al cuenco
8  Quitar aceite sartén
9  Echar la mezcla de cuenco a sartén
10 Cuajar un poco
11 Dar la vuelta
12 Terminar de cuajar
Por tanto, los algoritmos para ordenador deben estar compuestos de sucesiones de pasos muy simples y muy bien definidos. Ejemplos típicos de posibles pasos son: sumar dos números dados, comparar si un número es mayor que otro, comprobar si la tercera letra de la palabra “ejemplo” es una “e”, etcétera. Estos pasos suelen venir agrupados en bloques que se pueden repetir varias veces, también existen pasos en los que es posible tomar decisiones, o incluso se pueden crear grupos de pasos comunes para utilizarlos más de una vez. Además, para que el algoritmo esté completo, es fundamental indicar cuales son los valores de entrada del mismo, y cuales son los resultados o valores de salida. Por ejemplo, un algoritmo podría tener como entrada un conjunto de diez números (17, 1, 5, 13, 15, 9, 21, 2, 4, 8), y como salida devolver el mismo conjunto de números pero ordenados de mayor a menor (21, 17, 15, 13, 9, 8, 5, 4, 2, 1).
Pero no se preocupe el lector si por ahora no entiende del todo cómo son los algoritmos que utilizan los ordenadores, ya que todas estas cuestiones irán quedando más claras a lo largo de las próximas entradas de este blog.

No hay comentarios:

Publicar un comentario