Documentos de Académico
Documentos de Profesional
Documentos de Cultura
ALGORITMOS
4.1 Introducción
4.2 Ejemplo de algoritmos
Es tan sencillo.
4.3 Análisis de algoritmos Paso 1: Encontramos la peor obra del mundo, un
Rincón de solución de fracaso seguro.
problemas: diseño y análisis Paso 2: Reúno un millón de dólares, hay muchas
de un algoritmo viejitas lindas en el mundo.
4.4 Algoritmos recursivos Paso 3: Tú te vas a trabajar en los libros. Una lista
Notas ficticia de avales, una para el gobierno, otra para
Repaso del capítulo
nosotros. Tú puedes hacerlo Bloom, eres un mago.
Autoevaluación del capítulo
Ejercicios para computadora Paso 4: Abrimos en Broadway y antes de que puedas
decir algo.
Paso 5: Cerramos en Broadway.
Paso 6: Nos llevamos el millón y volamos a Río de
Janeiro.
DE THE PRODUCERS
Un algoritmo es un método paso a paso para resolver algunos problemas. Los enfoques de
este tipo para resolver problemas no son novedad; de hecho, la palabra “algoritmo” se deriva
del nombre del matemático persa del siglo IX, al-Khowarizmi. En la actualidad, “algoritmo”
suele referirse a una solución ejecutable por una computadora. En este libro, la preocupación
principal será que se pueda ejecutar en una computadora “tradicional”, es decir, una compu-
tadora personal, con un solo procesador que ejecute instrucciones paso a paso.
Después de introducir los algoritmos y proporcionar varios ejemplos, nos dedicare-
mos al análisis de los algoritmos, es decir, al tiempo y espacio requeridos para ejecutarlos.
Concluiremos con un examen de los algoritmos recursivos, los que se refieren o recurren a
sí mismos.
4.1 ➜ Introducción
Por lo general, los algoritmos tienen las siguientes características:
■ Entrada El algoritmo recibe datos de entrada.
■ Salida El algoritmo produce una salida.
■ Precisión Los pasos se establecen con precisión.
■ Determinismo Los resultados intermedios de cada paso de ejecución son únicos
y están determinados sólo por las entradas y los resultados de los pasos anteriores.
145
146 Capítulo 4 ◆ Algoritmos
Como ejemplo, considere el siguiente algoritmo que encuentra el máximo de tres números
a, b y c:
1. grande = a,
2. Si b > grande, entonces grande = b,
3. Si c > grande, entonces grande = c.
(Como se explica en el apéndice C, = es el operador asignación.)
La idea del algoritmo es inspeccionar los números uno por uno y copiar el valor más
grande encontrado a la variable grande. En la conclusión del algoritmo, grande será igual
al valor mayor de los tres números.
Ahora se muestra la manera en que el algoritmo anterior se ejecuta para algunos va-
lores específicos de a, b y c. Esta simulación se llama seguimiento o rastreo. Primero su-
ponga que
a = 1, b = 5, c=3
En la línea 1, grande tiene el valor de a (1). En la línea 2, b > grande (5 > 1) es verdade-
ra, de manera que grande es igual a b (5). En la línea 3, c > grande (3 > 5) es falsa, y no
hay cambio. En este punto grande es 5, el valor mayor entre a, b y c.
Suponga que
a = 6, b = 1, c=9
En la línea 1, grande tiene el valor de a (6). En la línea 2, b > grande (1 > 6) es falsa, y
no hay cambio. En la línea 3, c > grande (9 > 6) es verdadera, de manera que grande es
igual a 9. En este punto grande es 9, el valor mayor entre a, b y c.
Se verifica que el ejemplo de algoritmo tiene las propiedades establecidas al inicio
de esta sección.
El algoritmo recibe los tres valores a, b y c como entrada y produce el valor grande
como salida.
Los pasos del algoritmo se establecen con suficiente precisión de manera que éste
puede escribirse en un lenguaje de programación y ser ejecutado por una computadora.
A partir de los valores de entrada, cada paso intermedio de un algoritmo produce un
resultado único. Por ejemplo, dados los valores
a = 1, b = 5, c = 3,
en la línea 2, grande tiene el valor 5 sin importar quién ejecuta el algoritmo.
El algoritmo termina después de un número finito de pasos (tres pasos) y contesta co-
rrectamente la pregunta planteada (encontrar el mayor de tres valores de entrada).
El algoritmo es general; permite encontrar el valor más grande de cualesquiera tres
números.
La descripción de qué es un algoritmo será suficiente para las necesidades de este li-
bro. Sin embargo, debe observarse que es posible dar una definición matemática precisa de
“algoritmo” (vea las notas del capítulo 12).
Aunque el lenguaje común en ocasiones es adecuado para especificar un algoritmo, la
mayoría de los matemáticos y los especialistas en ciencias de la computación prefieren el seu-
docódigo por su precisión, estructura y universalidad. El seudocódigo recibe este nombre
porque se parece a un código real en lenguaje de computadora, como C++ y Java. Existen
muchas versiones de seudocódigo. A diferencia de los lenguajes para computadora que deben
preocuparse por puntos y comas, mayúsculas y minúsculas, palabras reservadas y otros ele-
mentos, cualquier versión de seudocódigo es aceptable siempre y cuando sus instrucciones no
sean ambiguas. Nuestro seudocódigo se describe con detalle en el apéndice C.
En cuanto al ejemplo de un algoritmo escrito en seudocódigo, se escribe el primer al-
goritmo de esta sección que encuentra el máximo de tres números.
4.1 ◆ Introducción 147
Para el paso base (i = 1), se observa que antes de que inicie la ejecución del ciclo “for”,
se asigna a grande el valor s1; entonces grande es sin duda el valor mayor de la subsucesión s1.
Suponga que grande es el valor mayor en la subsucesión s1, . . . , si. Si i < n es ver-
dadera (de manera que el cuerpo del ciclo “for” se ejecuta de nuevo), i se convierte en i +
1. Suponga primero que si+1 > grande. Entonces si+1 es el valor mayor en la subsucesión
s1, . . . , si, si+1. En este caso, el algoritmo asigna a grande el valor si+1. Ahora grande es
igual al mayor valor en la subsucesión s1, . . . , si, si+1. Suponga ahora que si+1 ≤ grande.
Entonces se concluye que grande es el valor mayor en la subsucesión s1, . . . , si, si+1. En
este caso, el algoritmo no cambia el valor de grande; así, grande es el mayor valor en la
subsucesión s1, . . . , si, si+1. Se ha probado el paso inductivo; por lo tanto,
grande es el mayor valor en la subsucesión s1, . . . , si
es un ciclo invariante.
El ciclo “for” termina cuando i = n. Como
grande es el mayor valor en la subsucesión s1, . . . , si
es un ciclo invariante, en este punto grande es el valor más grande en la subsucesión s1,
. . . , sn. Por lo tanto, el algoritmo 4.1.2 es correcto.
Ejercicios
1. Consulte en el directorio telefónico las instrucciones para llamar mo propuesto? ¿Depende alguna de ellas de la verdad de la conje-
de larga distancia. ¿Qué propiedades de un algoritmo (entrada, sa- tura de Goldbach (que todavía no resuelven los matemáticos)?
lida, precisión, determinismo, carácter finito, corrección, genera- 3. Escriba un algoritmo que encuentre el elemento menor entre a, b y c.
lidad) están presentes? ¿Qué propiedades faltan?
4. Escriba un algoritmo que encuentre el segundo elemento más peque-
2. La conjetura de Goldbach establece que todo número par mayor que ño entre a, b y c. Suponga que los valores de a, b y c son diferentes.
2 es la suma de dos números primos. El siguiente es un algoritmo
5. Escriba un algoritmo que regrese el valor más pequeño en la suce-
propuesto para verificar si la conjetura de Goldbach es verdadera:
sión s1, . . . , sn.
1. Sea n = 4.
6. Escriba un algoritmo que regrese el valor más grande y el segun-
2. Si n no es la suma de dos primos, la salida es “no” y se detiene. do elemento más grande en la sucesión s1, . . . , sn. Suponga que n
3. De otra manera, se aumenta n en 2 y se sigue al paso 2. > 1 y que los valores de la sucesión son diferentes.
4. La salida es “sí” y se detiene. 7. Escriba un algoritmo que regrese el valor más pequeño y el segun-
¿Qué propiedades de un algoritmo (entrada, salida, precisión, deter- do elemento más pequeño en la sucesión s1, . . . , sn. Suponga que
minismo, carácter finito, corrección, generalidad) tiene este algorit- n > 1 y que los valores de la sucesión son diferentes.