Está en la página 1de 9

Notas de Clase- 2002

EL PODER DEL ALGORITMO

Una de los sucesos más sorprendentes en la ciencia y las matemáticas del siglo XX es el
surgimiento del mundo computacional, informativo y visual asociado al ordenador. En este
evento matemáticos, fı́sicos e ingenieros tuvieron partes diferenciadas y complementarias.
Las figuras legendarias de Alan Turing y John von Neumann son bien conocidas del gran
público, aunque es menos sabido que otros gigantes de la matemática pura estaban en
la fotografı́a original, como David Hilbert y Kurt Gödel, y yendo más atrás en el tiempo
los mismı́simos Blaise Pascal y Gottfried Leibniz grandes matemáticos del siglo XVII, y
Charles Babbage gran inventor de máquinas calculadoras en el XIX.
El resultado de la aventura que se inició en los años 30 del siglo XX es una las maravillas
del mundo actual, una tecnologı́a poderosa, democrática y limpia.
Hoy vamos a ocuparnos del geniecillo matemático escondido entre los bits, el algoritmo,
y vamos a dar una idea de sus propiedades, sus manı́as y algo de su gran poder.
Definición. “Un algoritmo es un procedimiento efectivo y sistemático para resolver un
problema, usualmente matemático”.
Un Procedimiento es una serie de reglas diseñadas para alcanzar un objetivo; aquı́ se trata
de resolver un problema matemático.
Por Procedimiento Efectivo entienden los expertos algo muy concreto que nos servirá para
la definición detallada de algoritmo:
- es un número finito de reglas o instrucciones bien definidas,
- que actuando sobre datos de una clase dada,
- producen en un número finito de pasos perfectamente prescritos,
- la solución correcta a un problema matemático
- en todos los casos a considerar.
Esta última propiedad refleja el calificativo de sistemático en la definición.
Analicemos con más detalle estas frases. El lector versado en programación para ordena-
dores puede comparar los detalles con su experiencia personal.
(i) El procedimiento efectivo consiste en un número finito de instrucciones precisas toma-
das de un ”conjunto de instrucciones (admisibles)”, I,
(ii) Las instrucciones se aplican a un conjunto finito de datos tomado de un conjunto bien
definido de “datos admisibles”, D (input),
(iii) Estas instrucciones o reglas se ejecutan de forma automática o mecánica sin dar lugar
a fallos, dudas o interpretaciones en su ejecución,
(iv) Y producen tras “un número finito de pasos”,

1
(v) Un “resultado”concreto en cada caso (output),
(vi) Que da una solución correcta al problema propuesto en todos los casos.
Resumimos las 3 propiedades principales del algoritmo como procedimiento efectivo que
figuran en los textos de Algoritmia:
* Sistemático o Universal: resuelve todos los casos de un problema.
* Prescriptivo: es determinado y finito; no deja lugar a fallos, dudas o interpretaciones
sobre la marcha; por ello es mecanizable.
* Consistente: resuelve correctamente el problema en cuestión.
Comentarios. Hemos de señalar que un algoritmo ha de resolver todos los casos posibles
para los datos admisibles; se trata en general de un conjunto potencialmente infinito, por
ejemplo, los números enteros. Si es sólo aplicable a un subconjunto pequeño de datos, el
algoritmo no será muy útil. Todo ello es cuestión opinable: las personas algo versadas
en matemáticas no buscarán un algoritmo que calcule la raı́z cuadrada de un número
negativo (salvo que realmente les interesen los números complejos, hay clientes para todo
y algoritmos a su medida).
También el concepto de solución correcta puede ser opinable. En particular, muchos
algoritmos han de computar soluciones aproximadas. En esos casos la denominación de
solución correcta se traduce más bien por solución satisfactoria. Analizar estas cuestiones
suele ser la labor del matemático, ver más abajo la discusión.
En un lenguaje más coloquial, lo que caracteriza al algoritmo es que es realizable de
forma mecánica y en tiempo finito para obtener un resultado concreto y correcto en cada
caso propuesto. La palabra finito es crucial en todo lo anterior y es un aspecto nada
trivial, las famosas obras matemáticas K. Gödel [G] y A. Turing [T] giran precisamente
en torno a la finitud. Otras formulaciones que se hallan en la literatura y convienen
al algoritmo son las de procedimiento detallado, concreto, preciso, mecánico, práctico y
también el de método operativo.
Análisis de un algoritmo. Se observan las siguientes partes constituyentes:
- Datos o Input.
- Instrucciones de Cálculo.
- Instrucción de Parada.
- Expresión del resultado o Output.
Usualmente los algoritmos
- son numéricos, D es el conjunto de los números, naturales, enteros o reales (a veces
complejos). Los programas de ordenador piden usualmente que declaremos el tipo de
variable que usamos.
- Las instrucciones se escriben en un alfabeto simbólico dado. En muchos casos se trata
de lenguajes de ordenador, y los algoritmos se conocen como programas de cálculo o, mejor

2
dicho, son parte de esos programas. Pero un algoritmo es en sı́ un ente matemático y no
necesita a priori ser implementado en un programa.

3
Algoritmos iterativos:
Es un tipo frecuente en los procesos de cálculo numérico en que la instrucción básica, o
bloque de instrucciones básico, produce un resultado que sirve de dato de entrada (input)
a un segundo cálculo cuyo resultado sirve de dato a ..., y ası́ sucesivamente. Esto se
llama ”bucle”(loop). La utilización de bucles es una técnica básica del cálculo numérico,
pues permite resumir en unas pocas instrucciones un proceso que se traduce en cuantiosos
cálculos repetitivos, que afortunadamente dejamos al cuidado del ordenador. Todos los
lenguajes de programación (como PASCAL o MATLAB) tienen prevista una cómoda
escritura y sintaxis para los bucles.
En los algoritmos iterativos es preciso cuidar de
(1) como se accede al bucle, usualmente mediante un ”paso de inicialización”,
(2) cuántas iteraciones del bucle deben realizarse, bien indicándolo explı́citamente,
bien indicando un criterio efectivo cuya satisfacción termina la repetición.
Problemas usuales de un algoritmo:
- “el chisme se atasca”: existen datos para los que no está definida una de las instruc-
ciones. Por ejemplo, se pide que divida por x y x vale en este caso cero. También puede
haber errores de sintaxis, lo que es usual en los programas automáticos. Los lenguajes de
programación de ordenador tienen previsto como avisar al artista de cual es el problema.
Este es un error del usuario.
- “aún peor, se cuelga”(es decir, el bucle infinito): en los algoritmos iterativos pue-
de que se produzca un bucle en que las instrucciones y cálculos intermedios se repiten
cı́clicamente. Ya se imagina el lector que no hay forma de que termine en este caso, y
ello puede suceder aunque el número de instrucciones sea muy pequeño (sugerencia para
iniciados: ponga usted mismo un ejemplo). También puede darse el problema en forma de
la ”huida infinita”: pongamos que para realizar un paso se precisa previamente calcular
dos cantidades; pero la primera de ellas exige a su vez dos cálculos previos; y el primero
de éstos exige a su vez ... etc etc., no hay forma de que termine el primer cálculo. Este
es un error esencial, si no se resuelve el proceso no es computable.
La teorı́a y la practica. Algoritmos y soluciones aproximadas
En numerosos problemas matemáticos los datos que se manipulan son números reales
(como los problemas de la fı́sica y la geometrı́a) o bien producen soluciones reales a
partir de números enteros (como la extracción de raı́ces). Dado que el ordenador es
(esencialmente) finito, trata en general los números reales mediante sus aproximaciones
decimales más o menos largas. Ello provoca un problema de enorme importancia filosófica
y práctica: qué significado tienen las soluciones con un número finito de cifras decimales
producidas por estos métodos y en que sentido aproximan la solución exacta pensada por
los teóricos.
En resumen, calcular la solución exacta no es, contra lo que pudiera pensarse, el obje-
tivo de muchos algoritmos, pues es un trabajo inabordable en forma efectiva o meramente

4
no práctico. Definir en esos casos la solución que nosotros prudentemente hemos llamado
correcta o satisfactoria es parte importante del arte algorı́tmico y en ella se junta el interés
del cliente (por ejemplo, un cientı́fico que usará los resultados) y los conocimientos del
experto (matemático o informático). Reflejando esta problemática se dice entonces que la
solución hallada es válida. Ası́, una raı́z cuadrada se calcula con tantas cifras decimales
como desee el cliente, pero no con infinita exactitud.
Determinismo y azar
Uno estarı́a tentado de añadir en la descripción del algoritmo la frase ”dados los
mismos datos se produce el mismo resultado”. De hecho, ası́ se caracterizan los algoritmos
deterministas, que son los clásicos.
Sin embargo el mundo progresa sin cesar. Son hoy dı́a de gran uso en la matemática,
la ciencia, la economı́a y la ingenierı́a los algoritmos estocásticos (o probabilistas), en los
que se introduce en alguno de los pasos una llamada al azar, por ejemplo en la forma
de un número aleatorio como dato. Ello se visualiza por ejemplo diciendo que en un
determinado momento tomamos una decisión tirando una moneda (virtual). La ley de los
grandes números y su extraña magia nos garantizan que en gran cantidad de supuestos
ello nos conduce a algoritmos rapidı́simos que ofrecen soluciones que son asintóticamente
correctas”. Uno se pregunta que significa esta última frase pero ese es otro fascinante
tema de estudio.
Algoritmia
Es la ciencia de los algoritmos. En ella se estudia como construir buenos algoritmos,
e incluso algoritmos óptimos. Se define la eficiencia de un algoritmo midiendo su coste
de cálculo. Aunque el cálculo del coste depende de las caracterı́sticas de los agentes
calculadores (es decir, los ordenadores) y se mide en función del tiempo consumido (tiempo
de CPU por ejemplo), se trata de una disciplina muy matemática y hermosa en forma de
Teorı́a de la Complejidad.
El Análisis Matemático se encarga de demostrar que los algoritmos son realmente
consistentes con su problema, y de evaluar la velocidad de convergencia de los algoritmos
iterativos. El gran maestro, Isaac Newton, ya pasó por estos pagos dejando su profunda
huella (como el método de Newton de cálculo de raı́ces de funciones).
Con todo el atractivo de la teorı́a, no debemos olvidar por un momento que la mere-
cida gloria de los algoritmos en nuestra sociedad informatizada se basa en la capacidad
práctica para calcular rápida y mecánicamente y dar ası́ respuesta numérica a toda clase
de problemas. Un poder que ni se soñaba hace sólo 60 años y que uno imagina que encan-
tarı́a a Newton, inventor de algoritmos y calculador a mano. En resumen, los algoritmos
son importantes porque funcionan y calculan (casi) todo lo imaginable.
Una referencia sobre Algoritmia para los estudiosos: [BB]

5
10 familias de algoritmos famosos
Presentamos aquı́ una lista de algoritmos clásicos de las matemáticas, organizados en
10 familias.
1 - Los algoritmos de las operaciones aritméticas en base 10. El algoritmo de la raı́z.
2- El algoritmo de Euclides para hallar el máximo común divisor de dos números
enteros. Idem de polinomios.
3- La criba de Eratóstenes para obtener la lista de números primos (inferiores a un
entero dado).
4- Fracciones continuas. La fracción continua que halla la raı́z de 2.
5- El algoritmo de cambio de base numérica (por ejemplo de base 10 a base 2). Los
algoritmos de las operaciones aritméticas en base 2.
6- El método de Newton para hallar raı́ces de funciones (resolución de ecuaciones).
Se trata de uno de los algoritmos más bellos por la combinación de sencillez, alcance y
rapidez de convergencia.
7- La tabla de números combinatorios (coeficientes binómicos) de Cardano-Tartaglia.
8- El algoritmo de Gauss para resolver sistemas de ecuaciones lineales.
9- La integración de funciones (por ejemplo algebraicas) por métodos numéricos (como
el del rectángulo o del trapecio).
10- El método de Euler para integrar ecuaciones diferenciales ordinarias. Las familias
de métodos Runge-Kutta y multipaso.
Grandes algoritmos del Siglo XX
- El algoritmo del Simplex. El Número Uno de los algoritmos aplicados en el siglo
XX. Inventado por George Dantzig en 1947, figura en una enorme cantidad de métodos
de programación lineal y optimización.
- La Fast Fourier Transform o Transformada de Fourier rápida. Otra herramienta
computacional de increı́ble poder. Para aprender todo sobre ella visitar
http://www.fftw.org/links.html
- Los algoritmos basados en el método de Monte Carlo (probabilistas).
- Los algoritmos de grafos.
- Los algoritmos genéticos.
- Los algoritmos de la inteligencia artificial.
Historia:
El nombre procede del gran matemático árabe (musulmán) del siglo IX Mohámed
ben Musa al Juarizmi (Abu Ja’far Muhammad ibn Musa Al-Khwarizmi, en la versión
inglesa). El final del nombre puede deberse a su región de origen en la actual república
de Uzbekistán, el Joresm, no lejos de la mı́tica Samarcanda, pero no es seguro. Sı́ lo es
que trabajó en la famosa Casa de la Sabidurı́a que erigió el califa Harun al-Rashid en

6
Baghdad.
Al Juarizmi es famoso por su tratado de Álgebra, “Hisab al-jabr w’al-muqabala”, que
es el origen de la palabra álgebra. El nombre algoritmo deriva en concreto de la traducción
al latı́n de su obra de aritmética, “Algoritmi de numero Indorum”, sobre el cálculo a la
manera india, o sea sobre la aritmética con notación posicional que hoy usamos (pero no
se conoce el original de esta obra).
Referencia para la Historia de las Matemáticas en la red:
http://www-history.mcs.st-andrews.ac.uk/history/

NOTAS AVANZADAS
Computabilidad.
El Problema de la Parada (Halting Problem) es uno de los problemas estrella de la
computabilidad e hizo la fama de Alan Turing. Se preguntó el buen inglés si no existirı́a
un algoritmo universal que permitiera descubrir si un algoritmo dado (cualquiera) va a
pararse en tiempo finito (o al contrario si va a seguir con su tema eternamente). La
respuesta es negativa, tal cosa no puede existir por una cuestión lógica, y ello pone un
lı́mite inevitable a la capacidad de la matemática teórica y práctica. Es uno de los
resultados matemáticos más justamente famosos del siglo XX.
Una de los grandes logros de la computabilidad como ciencia es el haber establecido la
equivalencia de los diversos modelos de “máquina de cálculo”que se han ido proponiendo
y que responden del funcionamiento de los ordenadores que usamos, empezando con la
máquina de Turing (1936). Este resultado proporciona una profunda unidad filosófica
a todo el arte computacional actual y con ello una base sólida a la Sociedad de la In-
formación. La lista de instrucciones básicas con las que todo algoritmo numérico puede
implementarse en estas máquinas es sorprendemente muy corta. Ası́, en el modelo de
máquina universal de cálculo URM (Universal Register Machine) muy utilizada a efectos
docentes la lista es:
I = Z(n), S(n), T (m, n), J(m, n, p),
consistente en poner un cero en el registro n, poner el número siguiente, trasponer dos
registros y hacer una sustitución (que permite programar iteraciones). Esta equivalencia
de todos los conceptos de computabilidad es la famosa Tesis de Church. Ver para más
detalles ver el texto de Curtland [Ca].
Todos estos conceptos de computabilidad son teóricos pero es importante recordar
que los algoritmos se corren en computadoras de capacidad finita y existen restricciones
adicionales de tipo práctico o fı́sico que se van suavizando con el progreso pero están
siempre presentes.
En la práctica los ”lenguajes de alto nivel”, como BASIC, PASCAL, C++ o MATHE-
MATICA, utilizan muchas instrucciones que imitan las frases del idioma natural (inglés)
para más comodidad del escritor, pero todas ellas son reducibles a los mı́nimos esquemas

7
básicos de los ”lenguajes de máquina”.
El algoritmo y el infinito
Hemos dicho que la finitud es una de las caracterı́sticas esenciales de la definición
y funcionamiento del algoritmo. Sin embargo, el infinito, ese viejo amigo, no deja de
aparecer por detrás del escenario; una suerte, pues el infinito es la sal de las matemáticas.
Veamos cómo. Si bien ha de ser finito el número de cálculos que se realizan en cada
experimento de utilización de un algoritmo, por ejemplo, el de Euclides, el número de
posibles experimentos distintos es infinito. Lo mismo se puede decir de las operaciones
elementales. Se trata del famoso ”infinito potencial”, ya estudiado por Aristóteles, que
habita confortablemente en nuestras mentes (por lo menos) y nos permite imaginar y
escribir las teorı́as.
Otro ejemplo: la criba de Eratóstenes calcula algorı́tmicamente todos los números
primos menores que un entero dado, y termina esta labor sistemáticamente en un tiempo
finito. Pero, dado que el conjunto de los números enteros naturales y de los primos es
infinito, el conjunto de primos que podemos calcular con la criba es infinito, y el algoritmo
no se detendrá si no le damos la oportuna orden de parada. Por cierto que parece claro
que la Humanidad nunca ha calculado más de una cierta cantidad de primos; volvemos
ası́ al mundo de lo finito. Lo que nos lleva como divertimento a la curiosa pregunta de
cual es el mayor número primo jamás calculado, o jamás impreso y publicado, o cuál es
el mayor jamás pensado, y que quieren decir las expresiones anteriores de modo efectivo
(sugerencia: dése un minuto para reflexionar sobre estas filosofı́as). :-)
Article in Encyclopaedia Britannica
ALGORITHM. Systematic procedure that produces in a finite number of steps the answer
to a question or the solution of a problem. The name derives from the Latin translation,
Algoritmi de numero Indorum, of the 9th-century Muslim mathematician al-Khwarizmi’s
arithmetic treatise Al-Khwarizmi Concerning the Hindu Art of Reckoning.
Artı́culo en DRAE
ALGORITMO. Del ár. al-Jwarizmi, sobrenombre del célebre matemático Mohámed ben
Musa. 1. m. Conjunto ordenado y finito de operaciones que permite hallar la solución de
un problema. 2. Método y notación en las distintas formas del cálculo.

8
Referencias
[B] D. Berlinski, “The advent of the algorithm”, Harcourt, San Diego, 2000.

[BB] Gilles Brassard, Paul Bratley, “Fundamentos de Algoritmia”, Prentice Hall, Madrid, 1997.
Traducción de Rafael Garcı́a-Bermejo; revisión técnica de Ricardo Peña, Narciso Martı́,
Luis Joyanes Aguilar, 1999.

[Ca] J. Casti, “Five Golden Rules”, John Wiley, New York, 1996.

[Ca] N.J. Curtland, “Computability, An Introduction to recursive function theory”, Cambridge


Univ. Press, 1980.

[D] George B. Dantzig, “Linear Programming and Extensions”, Princeton University Press.

[G] K. Gödel, “Ueber formal unentscheidbare Saetze der Principia Mathematica und verwandter
Systeme”, (“On formally undecidable propositions of Principia Mathematica and other
related systems”), 1931.

[P] R. Penrose, “The Emperor’s New Mind”, Penguin, London, 1989.

[T] A. Turing, “On Computable Numbers, with an application to the Entscheidungsproblem”,


Proceedings of the London Mathematical Society. 1937.

Juan Luis Vázquez


Texto de 30 de enero de 2002. Corregido por última vez 28-10-2002

También podría gustarte