Está en la página 1de 4

Capítulo 4

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

■ Carácter finito El algoritmo termina; es decir, se detiene después de ejecutar un


número finito de instrucciones.
■ Corrección La salida producida por el algoritmo es correcta; es decir, el algorit-
mo resuelve el problema sin errores.
■ Generalidad El algoritmo se aplica a un conjunto de entradas.

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

Algoritmo 4.1.1 Encuentra el máximo de tres números


Este algoritmo encuentra el más grande entre los números a, b y c.
Entrada: a, b, c
Salida: grande (el mayor de a, b y c)
1. máx3(a, b, c){
2. grande = a
3. if(b > grande) // si b es mayor que grande, actualiza grande
4. grande = b
5. if(c > grande) // si c es mayor que grande, actualiza grande
6. grande = c
7. return grande
8. }

Nuestros algoritmos consisten en un título, una breve descripción del algoritmo, la


entrada y la salida del algoritmo, y las funciones que contienen las instrucciones del algo-
ritmo. El algoritmo 4.1.1 consta de una sola función. Para hacer más conveniente la refe-
rencia a las líneas individuales dentro de una función, en ocasiones se numeran algunas de
ellas. La función del algoritmo 4.1.1 tiene ocho líneas numeradas.
Cuando se ejecuta la función del algoritmo 4.1.1, en la línea 2 se hace grande igual
a a. En la línea 3 se comparan b y grande. Si b es mayor que grande, se ejecuta la línea 4
grande = b
pero si b no es mayor que grande, se salta a la línea 5. En la línea 5 se comparan c y gran-
de. Si c es mayor que grande, se ejecuta la línea 6
grande = c
pero si c no es mayor que grande, se salta a la línea 7. Así, al llegar a la línea 7, el valor de
grande será correctamente el mayor entre a, b y c.
En la línea 7 se regresa el valor de grande, que es igual al mayor de los números a,
b y c, al que invoca la función y la termina. El algoritmo 4.1.1 ha encontrado correctamen-
te el mayor de los tres números.
El método del algoritmo 4.1.1 resulta útil para encontrar el valor más grande en una
sucesión.

Algoritmo 4.1.2 Encuentra el valor máximo en una sucesión


Este algoritmo encuentra el número más grande de s1, . . . , sn.
Entrada: s, n
Salida: grande (el valor mayor en una sucesión s)
máx(s, n){
grande = s1
for i = 2 to n
if(si > grande)
grande = si
return grande
}

Se verifica que el algoritmo 4.1.2 es correcto probando que

grande es el valor mayor en la sucesión s1, . . . , si

es un ciclo invariante, usando inducción sobre i.


148 Capítulo 4 ◆ Algoritmos

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.

Sugerencias para resolver problemas


Para construir un algoritmo, con frecuencia es útil suponer que uno está a la mitad del al-
goritmo y parte del problema ya se resolvió. Por ejemplo, al encontrar el elemento más
grande en una sucesión s1, . . . , sn (algoritmo 4.1.2), fue útil suponer que ya se había en-
contrado el elemento mayor grande en la subsucesión s1, . . . , si. Entonces, sólo hubo que
ver el siguiente elemento si+1 y si si+1 era mayor que grande, simplemente se actualizaba
grande. Si si+1 no era mayor que grande, no se modificaba. Iterando este procedimiento se
llega al algoritmo. Esta observación también llevó al ciclo invariante
grande es el valor mayor en la subsucesión s1, . . . , si,
que nos permitió probar que el algoritmo 4.1.2 era correcto.

Sección de ejercicios de repaso


1. ¿Qué es un algoritmo? 4. ¿Cuáles son las ventajas del seudocódigo sobre el texto común al
2. Describa las siguientes propiedades que por lo general tiene un al- escribir un algoritmo?
goritmo: entrada, salida, precisión, determinismo, carácter finito, 5. ¿Cómo se relacionan los algoritmos con las funciones del seudo-
corrección y generalidad. código?
3. ¿Qué es el seguimiento (o rastreo) de un algoritmo?

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.

También podría gustarte