Algoritmos, conceptos básicos


Aproximación intuitiva a los algoritmos

Como ya se ha dicho, un lenguaje de programación no es más que una forma de representar un algoritmo, así pues, ¿qué es un algoritmo? Antes de proporcionar una definición precisa del término daremos un pequeño rodeo puesto que los algoritmos han acompañado a la humanidad desde hace mucho tiempo, con la salvedad de que la mayor parte eran dados por supuesto o bien se les denominaba con términos diferentes. A continuación se muestran algunos ejemplos clásicos.

Algoritmo “obvio a posteriori”: Instrucciones para subir una escalera.
[...] Las escaleras se suben de frente, pues hacia atrás o de costado resultan particularmente incómodas. La actitud natural consiste en mantenerse de pie, los brazos colgando sin esfuerzo, la cabeza erguida aunque no tanto que los ojos dejen de ver los peldaños inmediatamente superiores al que se pisa, y respirando lenta y regularmente. Para subir una escalera se comienza por levantar esa parte del cuerpo situada a la derecha abajo, envuelta casi siempre en cuero o gamuza, y que salvo excepciones cabe exactamente en el escalón. Puesta en el primer peldaño dicha parte, que para abreviar llamaremos pie, se recoge la parte equivalente de la izquierda (también llamada pie, pero que no ha de confundirse con el pie antes citado), y llevándola a la altura del pie, se le hace seguir hasta colocarla en el segundo peldaño, con lo cual en éste descansará el pie, y en el primero descansará el pie. (Los primeros peldaños son siempre los más difíciles, hasta adquirir la coordinación necesaria. La coincidencia de nombre entre el pie y el pie hace difícil la explicación. Cuídese especialmente de no levantar al mismo tiempo el pie y el pie). Llegando en esta forma al segundo peldaño, basta repetir alternadamente los movimientos hasta encontrarse con el final de la escalera. Se sale de ella fácilmente, con un ligero golpe de talón que la fija en su sitio, del que no se moverá hasta el momento del descenso.


Algoritmo de “andar por casa”: Tortilla de patatas a la española (6 personas)
Ingredientes: - 2 vasos (de los de agua) de aceite (1/2 litro) - sal - 8 huevos - 1 kg de patatas Se lavan las patatas una vez peladas, y se secan con un paño; se parten en dos a lo largo y después se cortan en láminas finitas. Se pone el aceite en la sartén a calentar y se fríen las patatas, moviéndolas de vez en cuando y echándoles un poco de sal. Una vez fritas (más o menos doradas, según gusten), se separan y se ponen a escurrir en un colador grande. Se quita el aceite sobrante de la sartén. Aparte se baten los huevos con tenedor y muy fuerte; se pone un poco de sal; en el mismo plato de los huevos se echan las patatas y se mueven con un tenedor. En una sartén grande (o en dos pequeñas) se ponen 3 cucharadas soperas de aceite para que sólo cubra el fondo. Cuando está caliente se vierte la mezcla de huevos y patatas. Se mueve la sartén por el mango para que no se pegue la tortilla. Cuando se vea que está bien despegada y dorada (esto depende del gusto de cada cual), se pone una tapadera encima, se vuelca la sartén y se escurre suavemente la tortilla otra vez en la sartén. Se vuelve a mover por el mango y cuando esté cuajada (a gusto) se pasa a una fuente redonda y se sirve.

Algoritmo “infantil”: Multiplicación de números enteros
Para obtener el producto de dos números enteros utilizando lápiz y papel se debe escribir el primer factor (multiplicando) y, justo debajo y alineado a la derecha, el segundo factor (multiplicador). Se recorren todas las cifras del multiplicador de derecha a izquierda y se operan con cada una de las cifras el multiplicando, también de derecha a izquierda, escribiendo los resultados intermedios en líneas separadas; cada línea estará desplazada una posición a la izquierda respecto a la línea inmediatamente superior. Una vez se han obtenido todos los resultados intermedios se suman columna a columna obteniéndose el resultado final.


Si se estudia con atención cada uno de los algoritmos anteriores descubriremos una serie de características interesantes que definen la naturaleza de lo que es un algoritmo:

- Un algoritmo resuelve un problema específico: subir una escalera, obtener una tortilla de patatas, hacer una multiplicación o determinar el máximo común divisor de dos números.

- Un algoritmo es llevado a cabo por una entidad que trabaja en un entorno dado: una persona cuyo universo inmediato se reduce a su propio cuerpo y una escalera; un cocinero con una sartén, huevos, patatas, aceite, sal y cebolla; o un niño con lápiz y papel.

- Un algoritmo consta de una serie de pasos que deben llevarse a cabo siguiendo una secuencia marcada: algunos de los pasos en uno de los algoritmos anteriores serían: dar la vuelta a la tortilla, batir los huevos, pelar las patatas o cascar los huevos; dichos pasos deben aplicarse en un orden prefijado y no de cualquier manera.

- Un algoritmo se aplica de forma mecánica: un algoritmo no precisa decisiones subjetivas ni creatividad en su aplicación, cualquiera con una receta adecuada para obtener tortilla de patatas logrará una tortilla de patatas. Sin embargo, sí es necesario un acto creativo para desarrollar un nuevo algoritmo.

- Un algoritmo termina en un tiempo finito: todos los algoritmos deben finalizar, pueden tardar más o menos tiempo en lograr un resultado pero dicho tiempo debe ser finito.


Definición de algoritmo. Etimología del término algoritmo

En resumen, Un algoritmo es una secuencia de pasos que es llevado a cabo de forma mecánica y sistemática por un actor que se desenvuelve en un entorno dado para resolver un problema determinado en un tiempo finito.
Esa podría ser una definición válida de algoritmo, otra posible definición sería la siguiente:

Un algoritmo es una combinación de instrucciones combinadas de forma adecuada para resolver un determinado problema en una cantidad finita de tiempo. Cada instrucción es una indicación sencilla y no ambigua.

En estos momentos, el alumno debería tener bastante claro qué es un algoritmo, en qué consiste y dar ejemplos de algoritmos; también es probable que se esté preguntando de dónde procede el mismo término, “ALGORITMO”, ¿por qué denominamos “algoritmos” a los algoritmos y no “recetas” o “combinaciones de indicaciones sencillas y no ambiguas...”?


El término proviene de Mahommed ibn Musa al-Khowârizmî (Mahommed, hijo de Musa, natural de Kharizm), matemático persa del siglo IX; las matemáticas le deben la introducción del sistema de numeración actual y del álgebra. En su libro De numero indiorum (Sobre los números hindúes) proporciona las reglas para realizar las operaciones aritméticas (con los nuevos números, por supuesto), dichas reglas se denominaron “reglas de al-Khowârizmî” y, por deformación “algoritmos”, haciéndose extensivo el término a cualquier conjunto de reglas para resolver un problema determinado.


Elementos participantes en la realización de un algoritmo

Al mencionar las características fundamentales de los algoritmos decíamos que un algoritmo es llevado a cabo por una entidad que trabaja en un entorno dado. En los ejemplos anteriores la entidad era un ser humano y el entorno era el propio entorno físico que le rodeaba; sin embargo, en esta asignatura los algoritmos que nos interesan no van a ser aplicados por un individuo (no sería práctico ni eficiente) sino por un instrumento mecánico. Así, de cara a una
descripción “aséptica” de los algoritmos se emplearán los siguientes términos para referirnos a los elementos que participan en un algoritmo:

- Procesador: un procesador es un ente que es capaz de entender los pasos (acciones) que componen el algoritmo y llevarlos a cabo (ejecutarlos).
- Entorno: es el conjunto de materiales necesarios para la ejecución del algoritmo.
- Acción: es un suceso, llevado a cabo por el procesador, que modifica el entorno.


Al aplicar estos conceptos al algoritmo de la tortilla de patatas podemos ver que el procesador es el cocinero, el entorno son los ingredientes (huevos, patatas, cebolla) y las acciones cada uno de los actos que se aplican sobre los ingredientes (cascar, batir, pelar, trocear, salar, freir, etc).
Si, en cambio, se aplican a un algoritmo que se vaya a ejecutar en un ordenador tenemos que el procesador es el ordenador, el entorno son los datos con los que va a trabajar y las acciones serían todas aquellas operaciones que el ordenador puede realizar sobre los datos (sumar, restar, comparar, etc).