Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Introduccin
Por Informtica se entiende la ciencia que estudia los procesos de transmisin, acumulacin y
tratamiento de la informacin. El trmino fue introducido por los franceses, Informatique, a fines
de los aos 60 del siglo pasado, aunque antes los norteamericanos haban introducido el trmino
Computer Science para asignar la ciencia sobre la transformacin de la informacin, basada en
las tcnicas de cmputo. Hoy ambos trminos se emplean como equivalentes.
El concepto de Informtica abarca las esferas ligadas con la elaboracin, creacin, empleo y
mantenimiento material y tcnico de los sistemas de procesamiento de la informacin, lo que
incluye el hardware y el software, los aspectos de organizacin y sus efectos: industriales, de
servicio, comerciales, sociales y polticos.
La Informtica queda constituida por cuatro componentes vinculados indisolublemente:
informacin, algoritmo, software y el hardware.
Observacin 1: El material que se presenta est dedicado al segundo de estos componentes el
Algoritmo .
El desarrollo alcanzado por la Informtica, su utilizacin en todas las esferas de la actividad
humana, hace necesario la bsqueda de nuevos y ms eficientes algoritmos. La disciplina que
estudia los algoritmos en todos sus aspectos se ha nombrado " Algorithmique" por Donald Knuth,
en un texto francs de 1976. Pero la comunidad internacional ha aceptado el trmino " Algortmica
".
Diseo de algoritmos
I.1 Nocin de algoritmo:
En el estudio del Cmputo (la Informtica en general), las siguientes preguntas se presentan desde
el primer momento:
Qu problemas pueden ser resueltos por un algoritmo (programa) de cmputo?
Qu soluciones pueden ser obtenidas eficientemente en la prctica?
Estas preguntas parecen ser lo suficientemente vagas para no permitir una respuesta exacta. Por lo
tanto de intentar dar una respuesta a las mismas debemos definir, de manera precisa, qu
entendemos por algoritmo?, qu agente de cmputo vamos a emplear para ejecutar el algoritmo
que resuelve el problema planteado?, cmo nosotros mediremos la efectividad prctica de las
soluciones?
El concepto de algoritmo procede del nombre del matemtico del Asia Central
Al-Jwarizmi en el siglo IX, se empleaba en las matemticas de la poca para designar las reglas de
las cuatro operaciones aritmticas, convirtindose en una de las nociones bsicas de la Matemtica.
En nuestros das este concepto es usado en muchas esferas de la actividad humana.
Antes de dar la nocin de algoritmo aclaremos el trmino agente de cmputo (procesador de la
informacin): es un medio, cuya tarea es: dada una data inicial, ejecutar las reglas del algoritmo
paso a paso, hasta obtener la data final (resultados), este puede ser humano, mecnico, electrnico,
etc.
Para ver trabajos similares o recibir informacin semanal sobre nuevas publicaciones, visite www.monografias.com
Entrada
Inicial
Resultado
Agente de
Cmputo
1
La definicin de algoritmo puede ser ms especfica, pero de manera informal (intuitiva) puede ser
enunciado como sigue:
Un algoritmo es un procedimiento finito y sistemtico, para procesar informacin simblica
discreta por un agente de cmputo, paso a paso y sin ambigedad.
La nocin intuitiva de algoritmo por su vaguedad y falta de rigor no puede ser aceptado como una
definicin formal, por lo que ha sido objeto de estudio continuo de la comunidad de investigadores.
Las tareas tpicas del algoritmo fueron: el clculo numrico, los problemas de ordenamiento y
bsqueda. En nuestros das sus esferas se han extendido a la solucin de problemas de las ms
variadas reas de la actividad humana (la ciencia, la produccin, los servicios, etc.)
En la teora clsica de la Informtica se consideran dominios de informacin discretos. El caso de
conjuntos de informacin continua ha sido extendido recientemente por Blum, Shub y Smale
(1989). Esta nueva extensin terica representa un desarrollo importante que extiende los conceptos
de recursividad y complejidad a nuevos campos matemticos como el anlisis y la topologa.
Observacin 2: Nosotros excluiremos el caso en que la informacin a procesar es un conjunto
continuo.
A lo largo de la historia muchos problemas han sido resueltos mediante tcnicas de cmputo. Sin
embargo, un estudio sistemtico de los algoritmos slo se ha desarrollado a partir de las ltimas
dcadas del pasado siglo.
Dos hecho han contribuido substancialmente al crecimiento de estos estudios. Uno es el estudio de
la definicin formal de algoritmo a partir de 1936, precedido por los resultados en los estudios de la
lgica matemtica de finales del siglo XIX. El otro es el desarrollo alcanzado por las computadoras
electrnicas, cuyo uso ha invadido toda la actividad humana lo cual ha requerido de estudios
profundos para lograr un uso eficaz de las mismas.
Estos hechos han dado lugar al desarrollo de dos direcciones en el estudio de los algoritmos: el
diseo (determinar los procedimientos adecuados para resolver el problema con el agente de
cmputo de que disponemos) y la teora de la complejidad algortmica (estudio de la eficiencia,
costo en tiempo y recursos con que el agente de cmputo ejecuta un algoritmo que resuelve el
problema).
En principio, dado un problema puede determinarse un algoritmo que lo resuelva, si este puede ser
formulado de manera lgica, tal que el agente de cmputo sea capaz de comprenderlo y controlar su
ejecucin paso a paso. Un algoritmo responde a la ecuacin ALGORITMO = LOGICA +
CONTROL. sta es una idea importante, segn la cual la tarea fundamental del programador es
formular lgica y apropiadamente el problema para que la solucin sea buscada mediante un
algoritmo.
Cmo debe el programador formular el problema? Esta es realmente una tarea de gran
complejidad, siendo necesario realizar investigaciones tericas y experimentales que permitan
desarrollar metodologas y formalismos para enfrentar con xito problemas de gran importancia
prctica.
I.2 Los alfabetos, las palabras, los lenguajes:
La informacin se transmite por los canales mediante palabras (sucesin finita de elementos de un
alfabeto: conjunto finito no vaco de smbolos). El nmero de smbolos de la informacin se llama
longitud de la informacin.
Ejemplo 1: Como alfabeto podemos tener el sistema decimal D, sistema binario B, los alfabetos de
los distintos idiomas en que nos comunicamos.
D = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; B = {0, 1}
Palabras representadas mediante los elementos de los alfabetos D y B:
w
D
= 21654, w
B
= 0101.
Para ver trabajos similares o recibir informacin semanal sobre nuevas publicaciones, visite www.monografias.com
2
Dado un alfabeto A = {a
1
,
a
2
,..., a
n
}, denotemos por W(A) el conjunto de todas las palabras
formadas con los elementos de A. W(A) es un conjunto infinito numerable, es decir existe una
biyeccion entre W(A) y el conjunto de los nmeros naturales ().
Sea w una palabra no vaca (las palabras vacas son asociadas con el cero), tal que wW(A),
numeremos la posicin de cada carcter (smbolo) de w comenzando por la derecha, 0, 1, 2,;
entonces si el carcter a
r
de w se encuentra en la posicin s le asignamos un peso igual a r x k
s
, por k
tomamos el numero de elementos del alfabeto (por ejemplo para el alfabeto D, k = 10; para B, k =
2), r expresa el cardinal del smbolo del alfabeto. Entonces a w le corresponde un nmero natural
que es igual a la suma de los pesos de los caracteres que lo componen. Esta correspondencia se
llama numeracin k-dica.
Ejemplo 2:
Sea B = {a
1
,
a
2
} un alfabeto, donde, a
1
=0, a
2
=1; r = {r
1
,
r
2
} = {1,2}, sea w = 0101 una palabra
formada por los caracteres del alfabeto B. Numeremos los caracteres de w con los nmeros enteros
no negativos (comenzando por el cero), de derecha a izquierda, s = {s
3
,
s
2
, s
1
,
s
0
} = {3, 2, 1, 0}.
Determinemos el nmero natural que le corresponde a la palabra w, es decir, la numeracin 2-dica
para la palabra w:
r
1
xk
S3
+ r
2
xk
S2
+ r
1
xk
S1
+ r
2
xk
S0
=1x2
3
+ 2x2
2
+ 1x2+ 2x2
0
=20.
La numeracin k-adica asocia a cada palabra un nico nmero entero no negativo, lo que, la hace
diferente a la representacin usual en la base k (por ejemplo en la base usual 2 las palabras 0101
y 101 responden ambas al nmero 5).
0101=0x2
3
+ 1x2
2
+ 0x2+ 1x2
0
=5
101=1x2
2
+ 0x2+ 1x2
0
=5
El conjunto de las palabras definidas sobre un alfabeto se llama lenguaje sobre este alfabeto. Dado
un alfabeto A, sobre el pueden definirse como lenguajes particulares: el vaco , que no contiene
palabra alguna, y W(A), el lenguaje completo, que contiene todas las posibles palabras sobre A.
Dado un conjunto discreto de smbolos no vaco M, una representacin de M sobre el alfabeto A, es
una funcin inyectiva R: M W(A), que asocia a cada smbolo sM una palabras wW(A). La
funcin R asocia al conjunto M el lenguaje L
M
sobre A, es decir, L
M
= Im(R) W(A),
L
M
= {w: wW(A) y w =R(s) para algn sM}
Ahora podemos dar una definicin rigurosa (formal) de algoritmo:
Definicin 1: Un algoritmo A no es ms que una terna (M; L
M
; g
L
), donde M es un conjunto
discreto no vaco de smbolos, L
M
W(A), un lenguaje asociado a M, g
L
: L
M
L
M
una funcin
que transforma las palabras wL
M
en otras palabras de L
M
.
En otras palabras, el algoritmo proporciona al agente de cmputo un mtodo sistemtico (funcin)
que transforma las palabras wL
M
en otras palabras de L
M
.
I.3 Requisitos bsicos de los algoritmos:
El requisito bsico que debe cumplir un algoritmo, es que el mismo debe ser eficaz, las reglas deben
ejecutarse de modo preciso sin ambigedades.
Asumamos que existe algn agente de cmputo eficaz, es decir, su tarea es realizada mediante un
nmero finito de pasos elementales (instrucciones), en un tiempo prudencial. El procedimiento de
cmputo a ejecutar por el agente de cmputo puede contener cualquier nmero de instrucciones,
pero siempre tiene que ser una sucesin finita, que proporcione una notacin formal conveniente,
mostrando de forma precisa las instrucciones que el agente de cmputo debe ejecutar, y en que
orden deben realizarse. La sucesin de instrucciones del procedimiento de cmputo puede depender
Para ver trabajos similares o recibir informacin semanal sobre nuevas publicaciones, visite www.monografias.com
3
de los datos de la entrada, segn las reglas especificadas; pero nunca se determinarn de manera
aleatoria o arbitraria. No se definir a priori lmite en el tamao de los datos de la entrada e
intermedios a procesar, as como de los resultados. Slo requeriremos que todos sean finitos. En
resumen todos los elementos del procedimiento de cmputo (datos, sucesin de instrucciones) a
ejecutar por el agente de cmputo tienen que ser finitas.
Como hemos planteado los algoritmos deben ser escritos de forma clara, sin ambigedades, para
que los mismos sean ejecutados de manera eficaz por el agente de cmputo.
Cualquiera que sea la representacin que se adopte para escribir un algoritmo, la misma debe
cumplir los requisitos siguientes:
a) El algoritmo debe ser comprensible para el agente de cmputo
b) La longitud del algoritmo es finita.
c) Cada paso del algoritmo indica una operacin, ejecutable sin ambigedad en un tiempo
finito.
d) El algoritmo recibe los datos de entrada, los procesa y produce los resultados como datos de
salida.
e) El algoritmo debe terminar para todos los datos de entrada aceptados, en un tiempo finito.
En la prctica, la condicin de terminacin no es suficiente, para definir cuan eficaz es un
algoritmo, la eficacia de un algoritmo significa que el agente de cmputo transforma los valores de
la data inicial haciendo uso de los recursos y el tiempo de ejecucin de forma eficaz, hasta obtener
los valores de la data final.
I.4 Estructuras de los algoritmos:
La representacin (escritura) de los algoritmos est directamente relacionada con el agente de
cmputo que va a ejecutarlo: grfico, seudo-cdigo, lenguaje de programacin, etc. Nosotros
emplearemos el seudo-cdigo, una representacin intermedia entre el lenguaje natural y los leguajes
de programacin, este queda definido por un sistema de reglas (instrucciones) para la escritura de
los algoritmos.
Las instrucciones definen la unidad estructural, designa un paso del tratamiento o la representacin
de la informacin de cualquier algoritmo.
Como se ha expresado, al ejecutar un algoritmo, este transforma los valores de algunas magnitudes
(vamos a considerar la magnitudes definidas en el conjunto de los nmeros reales), con las cuales
opera el algoritmo. Estas magnitudes tienen un nombre identificador: secuencia de smbolos que
comienza con una letra que las identifica. Las magnitudes se clasifican en constantes y variables
(simples y dimensionales). Los valores de las constantes permanecen invariables, mientas que los
valores de las variables cambian. El valor de una variable se puede cambiar con ayuda de una
instruccin de asignacin,
[identificador] = [expresin]
[expresin] define una funcin o constante
Ejemplo 3: Permetro de un tringulo dados sus lados.
P = a +b +c
P = 20
A la variable puede asignarse un valor con ayuda de la instruccin de entrada que transmite el valor
de las variables a partir de cierta fuente exterior.
Entrada [variable 1], [ variable 2], [ variable 3]
Ejemplo 4:
Entrada a, b, c
Tambin existe la instruccin anloga de salida.
Salida [variable 1], [ variable 2], [ variable 3]
Ejemplo 5:
Salida P
Para ver trabajos similares o recibir informacin semanal sobre nuevas publicaciones, visite www.monografias.com
4
Un elemento til es el uso de comentarios dentro del algoritmo,
// [ comentario]
Ejemplo 6: Calcular el permetro de un tringulo, dado sus lados:
//Clculo el permetro de un tringulo.
Entrada a, b, c // lados del tringulo
P = a + b + c
Salida P // permetro de un tringulo
//Fin del algoritmo
Analicemos ahora el siguiente problema: Dados los lados de un tringulo, se desea clasificarlo en:
equiltero, issceles, escaleno.
Como es conocido un tringulo solamente admite una clasificacin de acuerdo a la dimensin de
sus lados, por lo que estamos en presencia de la seleccin de alternativas: Un tringulo se define
como equiltero si la dimensin de sus lados son iguales, es decir, a = b = c, por la propiedad de
transitividad
a = c; un tringulo es issceles si dos de sus lados son iguales, es decir, a = b o b = c o a = c; es
escaleno si sus lados son diferentes a b y b c y a c.
Para expresar la anterior situacin se emplea la instruccin de bifurcacin (condicional), la cual
efecta la eleccin de las instrucciones a ejecutar en funcin del cumplimiento de un conjunto de
condiciones (en general estos pueden ser relaciones de orden (, , <, >, , =) unidos con los
operadores lgicos: y, o, no), como se expresa a continuacin,
Si [relacin de oprden1] (operador lgico) [ relacin de orden 2]
Entonces
[ instruccin 1]
[ instruccin 2]
:
Sino
[ instruccin 1],
[ instruccin 2]
:
Fin Si
Cuando se ejecuta la instrucciones de bifurcacin se realiza solamente un bloque de instrucciones:
si las condiciones se cumplen se ejecutan las instrucciones que aparecen despus de la palabra
reservada Entonces, en caso de no cumplirse la condicin se ejecutan las instrucciones que aparecen
despus de la palabra reservada Sino. Dentro de las instrucciones pueden aparecer otras
instrucciones de bifurcacin, como se presenta en el ejemplo siguiente.
Ejemplo 7: Dados los lados de un tringulo se desea clasificarlo en: equiltero, issceles, escaleno.
// Clasificar un tringulo en: equiltero, issceles, escaleno.
Entrada a, b, c // lados del tringulo
Si a = b y b = c
Entonces
Clas = tringulo equiltero
Sino Si a = b o b = c o a = c
Entonces
Clas = tringulo issceles
Sino
Clas = tringulo escaleno
Fin Si
Fin Si
Para ver trabajos similares o recibir informacin semanal sobre nuevas publicaciones, visite www.monografias.com
5
Salida Clas // clasificacin del tringulo.
//Fin del algoritmo
Veamos una nueva situacin:
Se tiene un conjunto que contiene los lados de n tringulos, se desea conocer cuantos tringulos
equilteros, issceles y escalenos contiene el conjunto.
Hasta el momento fuimos capaces de clasificar un tringulo dado sus lados. La nueva situacin nos
presenta un conjunto finito o lista determinada de elementos (se conoce de antemano la cantidad de
elementos que la componen).
Lo anterior puede ser representado de la forma siguiente: sea un conjunto finito T, cuyos elementos
son ternas (vectores de R
3
),
T= { (a
1
, b
1
, c
1
), (a
2
, b
2
, c
2
),, (a
n
, b
n
, c
n
) }
Para resolver el problema planteado definiremos la instruccin de iteracin (repetitiva o cclica) con
contador:
Para [ contador]=[ valor inicial] hasta [ valor final] (paso)
[ instruccin 1]
[ instruccin 2]
:
Prximo [ nuevo valor del contador]
El contador toma un valor inicial y se ejecutan las instrucciones que se encuentra entre las palabras
reservadas Para-Prximo (ciclo). Al llegar a la palabra reservada Prximo el contador se incrementa
de acuerdo al valor del paso (cuando no se define se asume como 1). Este proceso se repita hasta
que el contador alcance el valor final.
Ejemplo 8: Se desea conocer cuantos tringulos equilteros, issceles y escalenos, contiene un
conjunto de n tringulos.
// Determinar total de tringulos equilteros, issceles y escalenos
Entrada n // total de tringulos a clasificar
CEQ = 0, CES = 0, CIS = 0 // valores iniciales de los contadores
Para I =1 hasta n
Entrada a, b, c // lados del tringulo
Si a = b y b = c
Entonces
Clas = tringulo equiltero
CEQ = CEQ +1
Sino Si a = b o b = c o a = c
Entonces
Clas = tringulo issceles
CIS= CIS+1
Sino
Clas = tringulo escaleno
CES = CES +1
Fin Si
Fin Si
Salida Clas // clasificacin del tringulo.
Prximo I
Salida CEQ, CIS, CES // total de tringulos equilteros, issceles y escalenos
//Fin del algoritmo
Para ver trabajos similares o recibir informacin semanal sobre nuevas publicaciones, visite www.monografias.com
6
Hay problemas en que se desconoce el tamao de la lista (lista indeterminada) que va hacer
procesada, solamente se conoce una condicin que determina el final de la lista (ltimo elemento).
En estos casos es necesario emplear la instruccin de iteracin con condicin
Mientras [relacin de orden1] (operador lgico) [ relacin de orden 2]
[ instruccin 1]
[ instruccin 2]
:
Fin Mientras
Al principio se prueba la condicin que aparece despus de la palabra reservada Mientras, si esta se
satisface se ejecutan las instrucciones que se encuentran entre las palabras reservadas Mientras-Fin
Mientras (ciclo), estas se van a repetir hasta que la condicin deje de satisfacerse. Para esto es
necesario que las instrucciones que se ejecutan dentro del ciclo influyan en la condicin.
Ejemplo 9: Se tiene un conjunto finito tringulos, se conoce que el ltimo triangulo es escaleno y
las dimensiones de sus lados son: a = 27.5, b = 12.2,
c =32. Determine cuantos tringulos equilteros, issceles y escalenos, contiene el conjunto.
// Determinar total de tringulos equilteros, issceles y escalenos
CEQ = 0, CES = 0, CIS = 0 // valores iniciales de los contadores
Entrada a, b, c // lados del tringulo
Mientras a 27.5 y b 12.2 y c 32
Si a = b y b = c
Entonces
Clas = tringulo equiltero
CEQ = CEQ +1
Sino Si a = b o b = c o a = c
Entonces
Clas = tringulo issceles
CIS= CIS+1
Sino
Clas = tringulo escaleno
CES = CES +1
Fin Si
Fin Si
Salida Clas // clasificacin del tringulo.
Entrada a, b, c
Fin Mientras
Salida CEQ, CIS, CES +1 // total de tringulos equilteros, issceles y escalenos
//Fin del algoritmo
No es difcil ver que una lista determinada puede ser tratada con la instruccin iterativa
condicionada, como se muestra a continuacin.
Retomemos el problema del ejemplo 8, y escribamos el algoritmo empleando la instruccin iterativa
condicionada.
// Determinar total de tringulos equilteros, issceles y escalenos
Entrada n // total de tringulos a clasificar
CEQ = 0, CES = 0, CIS = 0 // valores iniciales de los contadores
I = 0 // valor inicial para el contador del ciclo
Mientras I n
Entrada a, b, c // lados del tringulo
Si a = b y b = c
Para ver trabajos similares o recibir informacin semanal sobre nuevas publicaciones, visite www.monografias.com
7
Entonces
Clas = tringulo equiltero
CEQ = CEQ +1
Sino Si a = b o b = c o a = c
Entonces
Clas = tringulo issceles
CIS= CIS+1
Sino
Clas = tringulo escaleno
CES = CES +1
Fin Si
Fin Si
I = I + 1
Fin Mientras
Salida Clas // clasificacin del tringulo.
Salida CEQ, CIS, CES // total de tringulos equilteros, issceles y escalenos
//Fin del algoritmo
I.4.1 Variables dimensionales (arreglos). Algoritmos subor-dinados.
Las variables dimensionales (variables con ndices, ejemplo: A(I), B(I, J)), describen las
estructuras compuestas de un conjunto de elementos ordenados conforme al valor de los ndices, es
decir, la posicin de los elementos queda definida por los valores de los ndices. Las variables
dimensionales tienen sus antecedentes en los entes matemticos, los vectores y las matrices.
A diferencia de las variables simples (cada variable simple almacena un slo valor), las variables
con un ndice A(I), almacenan tantos valores como el valor mximo que toma el ndice (en el caso
de la variable bidimensional B(I; J) estas almacenan un nmero de elementos igual al producto de
los mximos valores de los ndices).
En la generalidad de los casos se conoce el mximo valor de los ndices, siendo muy usada la
instruccin iterativa con contador para operar con las variables con ndices (lo anterior no significa
que no sea utilizada la instruccin iterativa con condicin).
Ejemplo 10: Determinar la suma de todos los elementos positivos de una matriz n x n.
// Suma de los elementos positivos de una matriz.
Entrar n // nmero de filas y columnas de la matriz
Sum = 0 //valor inicial de la suma
Para I =1 hasta n // inicio del ciclo para el ndice de las filas
Para J =1 hasta n // inicio del ciclo para el ndice de las columnas
Entrar A(I ;J) // entrada de los elementos de la matriz por filas
Si A(I ;J) > 0
Entonces
Sum = Sum +A(I ;J)
Fin Si
Prximo J // prximo valor del ndice por las columnas
Prximo I // prximo valor del ndice por las filas
Salida Sum //valor final de la suma
//Fin del algoritmo
Mostraremos ahora como realizar el algoritmo anterior, si se emplea la instruccin iterativa
condicional para definir el ciclo,
// Suma de los elementos positivos de una matriz.
Entrar n // nmero de filas y columnas de la matriz
Para ver trabajos similares o recibir informacin semanal sobre nuevas publicaciones, visite www.monografias.com
8
Sum = 0 //valor inicial de la suma
I = 1, J = 1 // valores iniciales de los ndices de las columnas y las filas
Mientras I N
Mientras J N
Entrar A(I ;J) // entrada de los elementos de la matriz por filas
Si A(I ;J) > 0
Entonces
Sum = Sum +A(I ;J)
Fin Si
J =J +1
Fin Mientras
I = I +1
Fin Mientras
Salida Sum //valor final de la suma
//Fin del algoritmo
Con frecuencia al desarrollar un algoritmo, resulta posible aprovechar los algoritmos elaborados
antes. De tal modo al construir el algoritmo, habitualmente se trata de dividir todo el problema en
subproblemas ms simples, y si para algn subproblema ya existe el algoritmo, ste puede incluirse
en el algoritmo en desarrollo. Esto permite no repetir el trabajo ya realizado, economizar el tiempo.
Los algoritmos acabados, incluidos por completo en el algoritmo que se elabora, se llaman
algoritmos auxiliares o subordinados, y el algoritmo en que ellos se incorporan se llama
algoritmo principal o fundamental.
El empleo de los algoritmos subordinados provoca la necesidad de formalizarlos de modo especial
para poder invocarlos en el algoritmo principal, para llamar un algoritmo subordinado desde el
algoritmo principal, nosotros utilizaremos la instruccin de llamada al algoritmo subordinado,
Llamada [nombre] [ (Lista de parmetros) ]
La ejecucin de la instruccin de llamada al algoritmo subordinado equivale a la ejecucin del
algoritmo subordinado. Luego de la palabra reservada Llamada se escribe un nombre el cual
identifica al algoritmo subordinado, la lista de parmetros entre parntesis, separados por comas,
indicndose el nombre de los parmetros de entrada y salida (los parmetros que son transferidos
desde el algoritmo principal al algoritmo subordinado, y los resultados que se obtienen en el
algoritmo subordinado y son transferidos al algoritmo principal), estos deben aparecer en el mismo
orden. Los algoritmos subordinados se escriben al final del algoritmo principal y su nombre tiene
que coincidir con el nombre que aparece en la instruccin de llamada al algoritmo subordinado, a
continuacin la lista de de parmetros entre parntesis separados por coma en el mismo orden en
que aparecen la llamada.
Ejemplo 11: Dado un conjunto de n tringulos, se desea conocer:
a) El valor mximo de la sucesin de permetros.
b) Cuantos tringulos equilteros, issceles y escalenos contiene el conjunto.
// Algoritmo Principal Tringulos
Entrada n // total de tringulos
CEQ = 0, CES = 0, CIS = 0 // valores iniciales de los contadores
Max = 0 ,P = 0 //valor inicial del permetro mximo, y el permetro
Para I =1 hasta n
Entrada a, b, c // lados del tringulo
Llamada CalPer (a, b, c, P)
Llamada MaxPer (P, Max)
Llamada ConTipoTrian (a, b, c, CEQ, CES, CIS)
Prximo I
Para ver trabajos similares o recibir informacin semanal sobre nuevas publicaciones, visite www.monografias.com
9
Salida Max //valor del permetro mximo
Salida CEQ, CIS, CES // total de tringulos equilteros, issceles y escalenos
//Fin del Algoritmo Principal
//Algoritmo Auxiliar Calculo Permetro
CalPer (a, b, c, P)
P = a + b + c
//Fin Algoritmo Auxiliar
//Algoritmo Auxiliar Mximo
MaxPer (P, Max)
Si P > Max
Entonces
Max = P
Fin Si
//Fin Algoritmo Auxiliar
//Algoritmo Auxiliar Contar tipo de tringulo
ConTipoTrian (a, b, c, CEQ, CES, CIS)
Si a = b y b = c
Entonces
CEQ = CEQ +1
Sino Si a = b o b = c o a = c
Entonces
CIS= CIS+1
Sino
CES = CES +1
Fin Si
Fin Si
//Fin Algoritmo Auxiliar
La forma de escribir los algoritmos diseando el algoritmo principal y los algoritmos auxiliares, es
conocida como diseo estructurado (modular) y ms que una tcnica de diseo constituye una
filosofa de programacin.
I.4.2 Algoritmos recursivos y Algoritmos de ordenamiento:
Un algoritmo recursivo es aquel que contiene un procedimiento recursivo, un procedimiento
recursivo queda definido mediante una funcin recursiva.
La teora de las funciones recursivas fue desarrollada a finales de la primera mitad del siglo pasado.
Vamos a considerar funciones de k argumentos de la forma:
N N :
k
,
donde N denota el conjunto de los nmeros naturales. Intuitivamente, una funcin computable (o
calculable) es una funcin numrica cuyo valor puede ser hallado mediante algn algoritmo.
Analicemos el caso particular ( ) N N : y , x
2
. Supongamos que su valor se halla a travs del
siguiente esquema de clculo:
'
+
. y , y , n F y , 1 n
, y f y , 0
Definicin 2: Una funcin numrica cuyo valor se calcula con ayuda de un esquema de clculo
recursivo, se llama funcin primitiva recursiva.
Ejemplos 12:
Para ver trabajos similares o recibir informacin semanal sobre nuevas publicaciones, visite www.monografias.com
10
1.
( )
( ) ( )
'
+
. 1 y , 1 n y , n
, y y , 0
Podemos apreciar que
( ) 1 y y , 1 +
,
( ) 2 y y , 2 +
, ,
( ) n y y , n +
. As, por induccin se
establece que
( ) y x y , x +
- suma de dos nmeros naturales.
2.
( )
( ) ( )
'
+
. y y , 1 n y , n
, 0 y , 0
Tenemos que
( ) y y , 1
,
( ) y 2 y , 2
, ,
( ) y n y , n
. Por tanto,
( ) y x y , x
- producto
de dos nmeros naturales.
3. Introduzcamos la operacin de diferencia truncada:
'
<
. y x , 0
, y x , y x
y x
Mostremos que esta funcin es primitiva recursiva. Primero vamos a probar que
1
x
es
primitiva recursiva. De hecho,
. n 1 , 1 n
, 0 1 , 0
x 1 1 x
, 0 1 0
Para ver trabajos similares o recibir informacin semanal sobre nuevas publicaciones, visite www.monografias.com
11
De forma general, la recursividad es un mtodo de definir una funcin mediante el cual para una
cantidad arbitraria de argumentos, un valor de ella se calcula por medio de un esquema determinado
a travs de los valores de la funcin ya conocidos o calculados anteriormente. As obtenemos:
'
. y , , y , y , y , , y , y , 1 n F y , , y , y , n
, y , , y , y f y , , y , y , 0
1 k 2 1 1 k 2 1 1 k 2 1
1 k 2 1 1 k 2 1
En resumen, un procedimiento recursivo es aquel, en el cual una funcin se llama a s. La
recursividad es una forma poderosa, elegante y natural de resolver una amplia clase de problemas.
El factorial de un nmero n se define como,
'
'
3 x si
1
2 x 1 si x
0 x si 1
1
2
) x (
e
) x ( F
3. El valor de la funcin H (y ,z) = Ln (y
2
) 1/ z
1/2
., donde y =2x
2
+ x,
z = x +y.
4. Dados tres ngulos se desea determinar:
a) Si estos ngulos pueden determinar un tringulo.
b) Si el tringulo es rectngulo, acutngulo o obtusngulo.
c) El mayor lado del triangulo.
d) La diferencia entre la suma de los ngulos interiores y los ngulos exteriores.
Escriba un algoritmo.
5. Dados los valores de verdad de las preposiciones simples p , q. Determine el valor de verdad de
las proposiciones compuestas:
a) p y q (pq)
b) p o q (pq),
Nota: 1 (verdadero), 0 (falso)
p Q
pq pq
1 1 1 1
1 0 0 1
0 1 0 1
0 0 0 0
Escriba un algoritmo.
6. Dada una sucesin (lista) de n nmeros reales. Escriba un algoritmo para:
a) Calcular la suma de los elementos de la sucesin.
b) Determinar el mayor y el menor elemento de la sucesin.
c) Determinar cuantos elementos son mayores que la suma.
7. Escriba un algoritmo para determinar la factorial de un entero no negativo n.
Nota: Escriba un algoritmo donde se emplee la instruccin iterativa con contador y otro donde
emplee la instruccin iterativa con condicin, para definir el ciclo.
8. Escriba un algoritmo para determinar el mayor y menor elemento de las sumas parciales de una
sucesin de n nmeros reales.
9. Escriba un algoritmo para determinar el mayor y menor elemento de las sumas consecutivas de
una sucesin de n nmeros reales.
10. Escriba un algoritmo para determinar el mximo comn divisor (MCD) de dos enteros no
negativos.
11. Dadas dos sucesiones de n nmeros naturales. Escriba un algoritmo para calcular el nmero de
pares de nmeros, correspondiente a cada sucesin, mltiplos entre si.
12. Escriba un algoritmo para contar las consonantes de una frase que contiene 20 caracteres.
Para ver trabajos similares o recibir informacin semanal sobre nuevas publicaciones, visite www.monografias.com
15
13. Escriba un algoritmo para contar las vocales de una frase que culmina con el caracter .
14. Sea un conjunto cuyos elementos son las palabras del idioma espaol formadas por 5 caracteres,
cuya ltima palabra es cinco. Escriba un algoritmo para:
a) Determinar cuantas palabras comienzan con vocal y cuantas comienzan con consonante.
b) Calcular el nmero de vocales de cada palabra.
c) Calcular el total de consonantes del conjunto.
15. Escriba un algoritmo para determinar cuantos nmeros enteros existen en el intervalo [1; 1000],
que slo son divisibles por tres nmeros enteros distintos.
16. Dada una matriz de dimensin n x n. Escriba un algoritmo que:
a) Encuentre el mayor elemento de cada columna.
b) Encuentre el menor elemento de cada fila.
c) Calcule: la suma de los elementos no negativos de la diagonal principal y producto de los
elementos negativos de la diagonal principal.
d) Calcule la factorial de la suma de los elementos no negativos.
Nota: 1. Escriba un algoritmo donde se emplee la instruccin iterativa con contador y otro donde
emplee la instruccin iterativa con condicin, para definir el ciclo y las variables indexadas.
2. Escriba el algoritmo empleando algoritmos auxiliares.
17. Para los ejercicios 6, 8, 9, 11, 13, 14, 15 escriba un algoritmo estructurado, empleando arreglos.
18. Escriba el algoritmo estructurado, empleando arreglos para calcular:
)! m n ( ! m
! n
C
n
m
x x x x x
L L L L
n
.
Note que en estos productos solamente debemos considerar aquellos factores para los cuales
0
i
, o sea, cuando
1
i
q
j
j
p
i
i
) n ( T ) n ( T
) n ( T ) n ( T
Entonces,
q
j
q
j
ij
q j
q
j
j
ij
q j
j
ij
i
) n ( T max ) n ( T max ) n ( T ) n ( T
1 1
2
1
1
2
1
2 1
Luego,
.
1
donde c
, c
1
1
1
2 1
2 2
1
1
1
1 1
1
]
1
p
i
ij
q j
p
i
ij
q j
p
i
i
max
q
c ), n ( T ) n ( T
) n ( T ) n ( T max
q
) n ( T ) n ( T
,
donde C
1
es una constante. El smbolo O(1) denota una funcin acotada por una constante.
Propiedades de O:
1. T
1
= O(T
1
(n))
2. T
1
= O(T
2
(n)) O(T
1
(n)) < O(T
2
(n))
3. O(T
1
(n)) = O(T
2
(n)) T
1
= O(T
2
(n)) y T
2
= O(T
1
(n))
4. Si T
1
(n) = O(T
2
(n)) y T
2
(n) = O(T
3
(n)) T
1
(n) = O(T
3
(n))
5. Si T
1
(n) = O(T
2
(n)) y T
1
(n) = O(T
3
(n)) T
1
(n) = O(min(T
2
(n), T
3
(n))).
6. Si T
1
(n) = O(T
2
(n)) y T
3
(n) = O(T
4
(n)) T
1
(n) +T
3
(n)= O(max(T
2
(n), T
4
(n))).
7. Si T
1
(n) = O(T
2
(n)) y T
3
(n) = O(T
4
(n)) T
1
(n) T
3
(n)= O(T
2
(n) T
4
(n)).
8. Si
1
2
1
C
) n ( T
) n ( T
lim
n
, dependiendo de los valores de que tome C
1
tenemos:
a) Si C
1
(0,) entonces O(T
1
(n)) = O(T
2
(n))
b) Si C
1
= 0 entonces T
1
= O(T
2
(n)) O(T
1
(n)) < O(T
2
(n))
Definicin 4: Sean T
1
y T
2
funciones de
+
. Escribimos T
1
(n) = (T
2
(n)), y diremos que T
1
(n)
es de orden al menos de T
2
(n), si C
2
, C
2
> 0 tal que T
1
(n) C
2
T
2
(n), n, excepto para un
nmero finito.
La igualdad T
1
(n)=(T
2
(n)) expresa que la funcin T
1
(n) esta acotada inferiormente por T
2
(n),
excepto para un nmero finito de excepciones.
Propiedades de :
1. T
1
= (T
1
(n))
2. T
1
= (T
2
(n)) (T
1
(n)) < (T
2
(n))
3. (T
1
(n)) = (T
2
(n)) T
1
= (T
2
(n)) y T
2
= (T
1
(n))
4. Si T
1
(n) = (T
2
(n)) y T
2
(n) = (T
3
(n)) T
1
(n) = (T
3
(n))
5. Si T
1
(n) = (T
2
(n)) y T
1
(n) = (T
3
(n)) T
1
(n) = (max(T
2
(n), T
3
(n))).
6. Si T
1
(n) = (T
2
(n)) y T
3
(n) = (T
4
(n)) T
1
(n) +T
3
(n)= (T
2
(n)+ T
4
(n))).
7. Si T
1
(n) = (T
2
(n)) y T
3
(n) = (T
4
(n)) T
1
(n) T
3
(n)= (T
2
(n) T
4
(n)).
8. Si
2
2
1
C
) n ( T
) n ( T
lim
n
, dependiendo de los valores de que tome C
2
tenemos:
b) Si C
2
(0,) entonces (T
1
(n)) = (T
2
(n))
c) Si C
2
=0 entonces T
1
= (T
2
(n)) (T
1
(n)) < (T
2
(n))
Definicin 5: Sean T
1
y T
2
funciones de
+
. Escribimos T
1
(n) = (T
2
(n)), y diremos que T
1
(n)
esta acotado superior e inferiormente por T
2
(n), excepto para un nmero finito de excepciones, C
2
T
2
(n) T
1
(n) C
1
T
2
(n).
Propiedades de :
1. T
1
= (T
1
(n))
Para ver trabajos similares o recibir informacin semanal sobre nuevas publicaciones, visite www.monografias.com
21
2. T
1
= (T
2
(n)) (T
1
(n)) = (T
2
(n))
3. (T
1
(n)) = (T
2
(n)) T
1
= (T
2
(n)) y T
2
= (T
1
(n))
4. Si T
1
(n) = (T
2
(n)) y T
2
(n) = (T
3
(n)) T
1
(n) = (T
3
(n))
5. Si T
1
(n) = (T
2
(n)) y T
3
(n) = (T
4
(n)) T
1
(n) +T
3
(n)= (max(T
2
(n), T
4
(n))).
6. Si T
1
(n) = (T
2
(n)) y T
3
(n) = (T
4
(n)) T
1
(n) T
3
(n)= (T
2
(n) T
4
(n)).
7. Si
C
) n ( T
) n ( T
lim
n
2
1
, dependiendo de los valores de que tome C tenemos:
d) Si C(0,) entonces (T
1
(n)) = (T
2
(n))
b) Si C =0 entonces los ordenes de T
1
(n) y T
2
(n) son distintos.
Ejemplo 20: Retomemos el ejemplo 18, T(n)=26n-19
podemos obtener las cotas inferior y
superior n 26n -19 26n, T(n)= O(n), para C
1
= 26, T(n)= (n), para C
2
= 1 y por la definicin 3
tenemos que T(n)= (n).
Para un algoritmo podemos obtener funciones que permiten medir su tiempo de ejecucin, estas
corresponden a sus casos mejor, medio y peor, y las denotaremos como T
m
(n), T
1/2
(n) y T
p
(n). Para
cada una de ellas podemos dar 3 cotas asintticas de crecimiento, por lo que se puede obtener un
total de 9 cotas para el algoritmo.
Diremos que un algoritmo es de orden de complejidad O(T(n)) si su tiempo de ejecucin para el
peor caso es de orden O de T, es decir T
p
(n)=O(T(n)). De forma anloga diremos que su orden de
complejidad para el mejor caso es (T(n)), si T
m
(n)= (T(n)). Un algoritmo es de orden exacto
(T(n)), si
T
1/2
(n)= (T(n)).
Un problema que tiene un algoritmo con tiempo de ejecucin polinomial en el peor de los casos se
considera un algoritmo bueno, la interpretacin de la anterior significa que el algoritmo resuelve de
forma eficiente el problema. Un problema que no tiene un algoritmo polinomial en el peor de los
casos se entiende como intratable. El tiempo de ejecucin de un algoritmo, si existe para un
problema intratable es muy largo, incluso para tamaos de entradas pequeos.
Ciertos problemas son tan difciles que no disponen de algoritmo alguno. Un problema para el cual
no existe algoritmo se dice que es irresoluble. Uno de los primeros problemas de esta clase es el
problema de terminacin: Dado un algoritmo arbitrario y un conjunto de entradas,concluir la
ejecucin en algn momento?
Un conjunto de problemas hasta ahora tienen un estado indeterminado, se supone que son
intratables, esto aun no se ha demostrado, son los problemas de clase NP, como ejemplos de estos
problemas se pueden mencionar: el problema de ciclo de Hamilton; dada una coleccin M de
conjuntos finitos y un entero positivo m |M|(|M|= al nmero de elementos de M), contiene M
al menos m conjuntos mutuamente ajenos? (conjuntos de M tomados por pares, tales que, su
interseccin es el vaco).
P es la clase de todos los problemas cuya solucin se obtiene mediante un algoritmo
deterministico (aquellos en que la solucin del problema se obtiene al ejecutar paso a paso una
secuencia de instrucciones predeterminada, si se conoce la entrada entonces el resultado es
totalmente predecible, tiene como base la lgica bivalente) en tiempo polinomial.
NP es la clase de todos los problemas que pueden resolverse en tiempo polinomial con un
algoritmo no deterministico (aquellos que la solucin del problema se obtiene mediante una
seleccin aleatoria de los pasos a ejecutar, estos no permiten a priori saber cual ser el resultado
para una entrada inicial, tiene como base la lgica difusa).
Claro P NP ya que los algoritmos deterministicos son un caso especial de los algoritmos no
deterministicos, dnde la estructura de seleccin es interminable. La pregunta si P es un
subconjunto propio de NP (PNP), es decir, si el algoritmo no deterministico es ms eficaz que
Para ver trabajos similares o recibir informacin semanal sobre nuevas publicaciones, visite www.monografias.com
22
uno deterministico, este es uno de los mayores problemas en la teora de complejidad. La
naturaleza matemtica de esta clase de problemas puede llevar a la errnea idea que su estudio
solamente tiene valor terico, en cambio muchos problemas de esta clase tienen una gran relevancia
para la solucin de aplicaciones prcticas, lo que justifica en inters de su estudio por la teora de la
complejidad.
II.3 Algoritmos correctos.
Otra elemento de gran de importancia para el anlisis de un algoritmo es su correctitud.
Definicin 6: Un algoritmo es correcto si satisface las siguientes exigencias:
a. Luego de un nmero finito de operaciones elementales convierte cualquier dato de
entrada wL
M
en dato de salida (resultado) w*.
b. El resultado w* es estable para pequeas perturbaciones de los datos de entrada w.
c. El resultado w* posee estabilidad computacional.
Si alguna de estas tres condiciones no es satisfecha decimos que el algoritmo no es correcto.
La necesidad de la condicin 1 es evidente. Si para obtener un resultado el agente de cmputo
necesita realizar infinitas operaciones o se requieren operaciones no realizables por agente de
cmputo, entonces el algoritmo no es considerado como correcto.
Ejemplo 21: El algoritmo de divisin de dos nmeros enteros, en general no es correcto, pues el
puede prolongarse infinitamente, si no se considera un criterio de parada en los clculos.
Ejemplo 22: El algoritmo de clculo de las races de a x
2
+ b x + c = 0 a travs de la formula x
1,2
=
(-b t(b
2
-4ac)
1/2
)/2a, no es correcto en general pues es necesario que el agente de computo sea capaz
de realizar la operacin de clculo de la raz cuadrada.
La segunda condicin significa que el resultado debe depender continuamente de los datos de
entrada bajo la condicin de ausencia de errores de clculo. Note que junto al dato wL
M
, en esta
definicin toman parte todas las entradas w
E
cercanos a w.
Ejemplo 23: Sea el problema del ejemplo 19, supongamos que el agente de cmputo es capaz de
realizar el clculo de la raz cuadrada. Si el algoritmo esta diseado para trabajar slo cuando b
2
-4ac
0, entonces este algoritmo no es estable respecto a los datos de entrada, adems si en el algoritmo
no contempla que a 0, entonces el tampoco ser estable respecto a los datos de entrada.
Debido a los errores de redondeo al suministrarle los datos al agente de cmputo y a las operaciones
que el agente de cmputo ejecuta, inevitablemente surgen errores. Para un determinado algoritmo el
valor de este error esta determinado por la exactitud
ac
del agente de cmputo. En el caso de las
operaciones aritmticas este valor depende de la cantidad de dgitos t destinados a la mantisa,
= t(
1
2
-1
+
2
2
-2
++
t
2
-t
), = 1,
i
{0, 1}, i = 2, 3, , t
y del mtodo de redondeo (truncamiento
ac
= 2
1-t
; redondeo
ac
= 2
-t
).
Definicin 7: Un algoritmo es estable computacionalmente si los errores de clculo del resultado
tienden a cero cuando
ac
0.
Definicin 8: Un algoritmo es estable, si es estable computacionalmente y respecto a los datos de
entrada, en caso contrario, el algoritmo no es estable.
Ejemplo 24: Supongamos que es necesario realizar una tabla de los valores de,
1
0
1
dx e x
x n
para n =1,2,,10, en un agente de cmputo que admite 6 cifras decimales en la mantisa y
ac
= 5
10
-7
.
Integrando por partes tenemos |
+ |
1
0
1 1
0
1
1
0
1
) x ( d e e x ) e ( d x I
n x x n x n
n
Por tanto, es vlida la frmula de recurrencia
Para ver trabajos similares o recibir informacin semanal sobre nuevas publicaciones, visite www.monografias.com
23
1 1
1
n , I n I
n n
Adems
71828 1 1
0
1
0
1
0
, I e dx e I
* x
Utilizando la formula de recurrencia encontramos sucesivamente:
5360 6 1 10 ; 19360 0 1 5
55360 0 1 9 ; 23872 0 1 4
00496 0 1 8 ; 30968 0 1 3
13120 0 1 7 ; 43656 0 1 2
16160 0 1 6 ; 71828 0 1 1
9 10 10 4 5 5
8 9 9 3 4 4
7 8 8 2 3 3
6 7 7 1 2 2
5 6 6 0 1 1
, I I I , I I I
, I I I , I I I
, I I I , I I I
, I I I , I I I
, I I I , I I I
* * * *
* * * *
* * * *
* * * *
* * * *
Es evidente que los valores de la integral
1
0
x 1 n
dx e x
son positivos, pues el integrando
x 1 n
e x
para todo x[0; 1], es siempre positiva. Sin embargo, los valores determinados para n = 9 y n =
10, son negativos. Dnde esta la causa de este error?. El error fue cometido al redondear el valor
de
0
I
a seis cifras significativas, es decir,
6 *
0 0 0
10 2 I I
. Sin embargo, al calcular
1
I
este error se conservo, al hallar
2
I
se multiplico por 2!, as sucesivamente hasta obtener
10
I
donde se multiplico por 10!. De esta forma llegamos a que 0
! n I I
*
n n n , por ejemplo,
73 0 9
0 9
, !
.
Por tanto, este algoritmo es inestable computacionalmente, pues el error crece proporcionalmente a
n!, y evidentemente esta situacin no mejora si se aumenta la cantidad de cifras de la mantisa.
Para obtener un algoritmo estable escribimos la formula de recurrencia en la forma
1 1
1
+
n , n / ) I ( I
n n
y realizamos los clculos en orden inverso, por ejemplo, para n = 54, tenemos 0
54 54
*
nI I .
Debido a que
55
1
0
54
54
e
dx x e I
, entonces
2
54 54
10 5
55
e
I
.
Sin embargo, al calcular
53
I
el error disminuye 54 veces, as se mantiene el proceso de clculo,
como resultado los valores de
n
I
sern calculados con 6 cifras significativas verdicas, y el error
decrece en cada paso.
La inestabilidad de un algoritmo puede ser deducida del anlisis de la estabilidad segn los datos de
entrada, pues la inestabilidad respecto a pequeos errores de redondeo de los datos automticamente
conlleva a la inestabilidad computacional
Sin embargo, al calcular
53
I
el error disminuye 54 veces, as se mantiene el proceso de clculo,
como resultado los valores de
n
I
sern calculados con 6 cifras significativas verdicas, y el error
decrece en cada paso.
La inestabilidad de un algoritmo puede ser deducida del anlisis de la estabilidad segn los datos de
entrada, pues la inestabilidad respecto a pequeos errores de redondeo de los datos automticamente
conlleva a la inestabilidad computacional.
Ejemplo 25: Supongamos que y
n
, n=1, 2, 2, se calcula por la formula de recurrencia
Y
n
=
n
y
n-1
+
n
, y
0
es un valor conocido,
n
una constante no negativa.
Sea y* un a valor aproximado de y
0
, entonces (si los clculos se realizan correctamente), los valores
obtenidos mediante la formula de recurrencia contienen errores, dados por
) y ( y y y y ) y (
*
n n
*
n n n
*
n n
*
n 1 1 1
Para ver trabajos similares o recibir informacin semanal sobre nuevas publicaciones, visite www.monografias.com
24
Si
n
1, entonces el algoritmo es estable respecto a los datos de entrada, pues
. n ), y ( ) y (
* *
n
0
Si, al contrario
n
q > 1, entonces ), y ( q ) y (
* n *
n 0
el error crece
indefinidamente cuando n . En este caso el algoritmo no es estable.
En realidad debemos notar que el algoritmo fue caracterizado como inestable cuando
n
q > 1 si
se cumplen dos condiciones, a las que no se le prest la debida atencin. La primera, la
continuacin ilimitada de la ejecucin, este carcter inestable nos informa sobre la tendencia a un
crecimiento ilimitado del error cuando la ejecucin se prolonga indefinidamente. La segunda esta
relacionada con la medida del error (hasta el momento no habamos hecho ninguna diferenciacin al
respecto, realmente habamos tratado el error absoluto, el cual no siempre es una medida adecuada,
por lo que se emplea el error relativo) seleccionada.
Ejemplo 26: Supongamos que en la formula de recurrencia del ejemplo 23, tenemos
n
0 y
n
= 0,
n. Entonces
n ) y (
y
y y
y
) y (
) y (
*
n
*
n n
*
n n n
*
n
*
n *
n
1
1
1 1
Luego ) y ( ) y (
* *
n 0
y bajo esta condicin, el algoritmo es relativamente estable para los datos de
entrada.
II.4 Sensibilidad de los algoritmos.
La ejecucin de clculos en un agente de cmputo est ligada sin lugar a dudas a la aparicin de
errores de clculo, originados fundamentalmente por el carcter finito de la representacin de los
nmeros, lo cual impone la necesidad de realizar aproximaciones de redondear o truncar el
resultado de cada operacin aritmtica. Inclusive cuando la cantidad de cifras para almacenar la
mantisa es grande, existe un peligro real de que luego de realizar un gran nmero de operaciones,
ocurra una acumulacin del error capaz de distorsionar parcial o totalmente el resultado calculado.
A veces, al realizar una cantidad no significativa de operaciones, el resultado puede ser incorrecto si
el algoritmo es bien sensible a los errores.
Cuando es necesario resolver problemas complejos (o sea, cuando el nmero de operaciones
aritmticas supera los millones, los clculos requieren muchos recursos, el resultado debe obtenerse
con una exactitud garantizada y es necesario tener una determinada responsabilidad ante la solucin
obtenida se impone tomar una posicin seria respecto a los errores de clculo.
II.4.1 Orden de ejecucin de las operaciones.
La solucin de los ms variados problemas en un agente de cmputo se reduce inevitablemente a la
realizacin de simples operaciones aritmticas y lgicas. Sin embargo, en muchas situaciones una
misma expresin matemtica admite varias posibilidades para su clculo, que difieren solamente en
el orden de ejecucin de las operaciones. Ahora bien, los resultados de los clculos en un agente de
cmputo dependen del orden de realizacin de las operaciones y la diferencia en los errores puede
ser altamente significativo.
Analicemos un ejemplo simple, pero ilustrativo, del clculo en un agente de cmputo de la suma
N
i
i N
a S
1
. Supongamos que
i
a
son nmeros reales positivos que pueden ser representados en la
mquina. En qu orden debemos sumarlos de forma que, en lo posible, sea mnimo el error de
clculo?
Sea
k
i
i k
a S
1
una suma parcial, y
*
k
S su valor aproximado, calculado segn la frmula
k
*
k
*
k
a S S
1
1
. El error del valor
*
k
S est compuesto por el error del valor
*
k
S
1
y por el error
1
Aqu y en lo sucesivo, los smbolos
,
, , etc., indican las operaciones aritmticas realizadas por el agente de
cmputo.
Para ver trabajos similares o recibir informacin semanal sobre nuevas publicaciones, visite www.monografias.com
25
en la ejecucin de la operacin
k
*
k
a S
1
. Por consiguiente,
( ) ( ) ( ) ( )
ac k
*
k ac k
*
k
*
k
*
k
S S a S S S + + +
1 1 1
, siendo ( )
*
k
S una cota superior del error
absoluto en el clculo de
*
k
S . Esto significa que
( )
ac ac N ac N
*
N
S S S S + + +
2 1
=
( ) ( ) ( ) ( )
ac N N
a a a N a N a N + + + + +
1 3 2 1
2 2 1 1 .
Debido a que el factor que acompaa a
i
a
en la frmula del acotamiento del error decrece con el
aumento de i , en general el error ser mnimo si se suman los nmeros en el orden creciente a sus
valores, comenzando con el menor.
A veces una seleccin inapropiada del orden de las operaciones conlleva a una prdida total de la
exactitud, o provoca la detencin de la ejecucin por desbordamiento, imposibilitando la
obtencin de los resultados.
Ejemplo 27: Supongamos que en un agente de cmputo con diapasn de nmeros representables
dado por
75 79
10 7 10 5
x
, es necesario hallar el producto
100 99 1 0
a a a a v
, donde
i
i
a
50
10 . Si realizamos los clculos en el orden natural entonces ya
99
1 0
10 a a nos da una
parada brusca por desbordamiento. Por otro lado, la ejecucin de los productos en orden inverso
conlleva a la prdida del orden, pues
79 99
99 100
10 5 10
< a a ; de esta forma,
0
99 100
a a
, por
lo que luego de realizar todas las multiplicaciones obtenemos el valor 0 v . Para este caso, una
posibilidad de organizar el orden de las operaciones es:
50 51 49 99 1 100 0
a a a a a a a v
.
II.4.2 Prdida catastrfica de la exactitud
En muchas ocasiones, una sucesin corta de clculos a partir de datos conocidos con buena
exactitud, conduce a un resultado que contiene muy pocas cifras significativas correctas (por
cifras significativas de un valor aproximado, se entiende toda cifra distinta de cero y el cero si este
se encuentra entre cifras significativas, por ejemplo 0,002080, en este nmero los tres primeros
ceros no son cifras significativas pues ellos solamente determinan el orden decimal de las restantes
cifras, los restantes dos ceros representan cifras significativas, por cifras significativas correctas
entenderemos aquellas cifras significativas del valor aproximado cuya posicin en el error absoluto
es igual a cero), inclusive ninguna en ciertos casos. Esto es lo que se conoce como prdida
catastrfica de la exactitud. En el ejemplo 27 ya nos encontramos con esta situacin, cuando un
determinado orden en el clculo de los productos condujo al resultado errneo v igual a cero.
Veamos otros ejemplos.
Ejemplo 28. Es conocido que la funcin
x
e puede ser representada en forma de la siguiente serie
de potencias convergente:
+ + + + + +
! n
x
!
x
!
x
x
! k
x
e
n
k
k
x
3 2
1
3 2
0
De aqu que parece razonable la posibilidad de calcular valores de la funcin
x
e mediante la suma
directa de la serie. Supongamos que para los clculos usamos un agente de cmputo de 6 cifras
decimales. Sea 1 8. x y vamos a calcular los valores de las sumas parciales hasta tanto la
adicin del prximo sumando cambie el valor de la suma:
00000 1
1 8
. e
.
con 6 cifras verdaderas. Sin embargo, para 2 16. x el problema analizado antes
aparece de nuevo. Procedamos de otro modo. Utilizando el desarrollo en la serie para x = 8.1,
calculamos:
47 3294 8050 32 10000 8 00000 1
1 8
. . . . e
.
,
y entonces, 000303539 0 1
1 8 1 8
. e / e
. .
se
le suele llamar nmero de condicionamiento de un algoritmo de clculo. Para los algoritmo
computacionalmente mal condicionados tenemos que
1 >>
A
. Cuando el nmero
A
adquiere un
valor muy grande, el algoritmo es prcticamente inestable.
Si usamos el primer algoritmo propuesto en el ejemplo 24 para el clculo de una serie finita de n
integrales
n
I , , I , I
2 1
, entonces el coeficiente de crecimiento del error es finito:
! n
A
, o sea,
al calcular una serie finita de integrales el algoritmo formalmente es estable. No obstante, para
valores no muy grandes de n el algoritmo es tan mal condicionado que en el plano prctico puede
considerarse como instable.
Algo no deseable sucede si para la solucin de un problema bien condicionado empleamos un
algoritmo mal condicionado. Precisamente este es el caso de los algoritmos propuestos al inicio en
los ejemplos 24 y 27.
Retomemos el ejemplo 28. Es posible prever la prdida catastrfica de exactitud al calcular valores
por medio de la suma directa de la serie? Analicemos el problema de la suma de la serie
0 k
k
a
con
sumandos
! k
x
a
k
k
. Cada uno de estos miembros se calcula con un error relativo ( )
ac
*
k
a .
Entonces, para 0 < x , la frmula (Ref. 5, pg 53)
0 0 k
k
k
k
a a
. El crecimiento
del mdulo de x proporciona un empeoramiento drstico del condicionamiento de los clculos.
Para 1 8. x ,
7 2 16
10
.
e