Dos ideas yacen brillando en el terciopelo del joyero: la primera es el cálculo; la segunda el algoritmo. El cálculo aunado al rico cuerpo de análisis matemático motivó que la ciencia moderna fuera posible; pero ha sido el algoritmo el que ha hecho posible el mundo moderno.
DAVID BERLINSKI, 2000.
En el primer tema se vio que la gran mayoría de los problemas no se pueden resolver mediante una computadora en un tiempo razonable. Por el contrario, ahora se abordarán problemas para los cuales sí existen soluciones eficientes, y se estudiarán algoritmos para resolverlos. Más adelante, en el siguiente tema, se verá cómo implementar los algoritmos en un lenguaje de programación, para ejecutarlos en una computadora. Un algoritmo es la descripción de un método que resuelve un problema; un programa es la expresión de un algoritmo en un lenguaje de programación. La disciplina que interesa ahora es la algorítmica, cuya tarea es:
1] Diseñar algoritmos correctos. Es decir, no sólo que resuelvan un problema, sino que además proporcionen maneras para cerciorarse de que lo hacen correctamente.
2] Comparar distintos algoritmos que resuelven el mismo problema, en relación con distintas medidas de eficiencia (qué tan rápido lo resuelve cada uno o qué tanta memoria utilizan), de manera que se pueda decir cuál es mejor respecto a alguna medida.
3] Buscar el mejor algoritmo para un problema. El reto incluye dos partes: diseñar un algoritmo y demostrar que no existe ninguno mejor.
Parafraseando a uno de los más grandes computólogos de la historia, Donald Knuth,1 una persona bien entrenada en computación sabe de algoritmos: cómo construirlos, manipularlos, entenderlos y analizarlos. Este conocimiento es una preparación para mucho más que diseñar buenos programas de computadora: es una herramienta mental de propósito general que será de ayuda crucial para el entendimiento de otras disciplinas, ya sea la química, la lingüística, la música, etc. Al intentar formalizar un algoritmo, se llega a un entendimiento más profundo que la simple comprensión de las cosas de manera tradicional. En efecto, la algorítmica es más que una rama de la computación; constituye su núcleo, y es relevante en la mayor parte de la ciencia, los negocios y la tecnología, como bien dice David Harel. 2
Existen dos maneras de organizar un texto de algorítmica: por problemas y por paradigmas de diseño. La primera es apropiada para presentar la amplia gama de problemas que se estudian; es muy conveniente para el programador que necesita resolver alguno de ellos y busca un algoritmo que se ajuste a sus propósitos. En cuanto a este libro, dirigido al público en general, la segunda es más adecuada, ya que los paradigmas de diseño que se presentarán son mecanismos generales de solución de problemas, como "divide y vencerás", útiles en muchas disciplinas del conocimiento humano.
Donald Knuth (1938)
Profesor emérito de la Universidad de Stanford, es considerado el padre del análisis de algoritmos. Galardonado con el Premio Turing en 1974, es autor del volumen El arte de la programación de computadoras, creador de TeX, aficionado a la teología y la música. En su casa tiene un órgano de dos pisos de altura.