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.