Está en la página 1de 10

INTRODUCCIN AL DISEO DE ALGORITMOS

1. ALGORITMOS Y PROGRAMAS.
Un computador puede realizar nicamente aquellas tareas que se especifican en funcin de las
operaciones que puede ejecutar. Para hacer que una computadora ejecute una tarea debemos decidir
que operaciones tiene que efectuar. Hay que describir cmo se realiza esta tarea. A esta descripcin
la llamamos Algoritmo.
Un algoritmo consiste en una secuencia de pasos que si se ejecutan exactamente en la forma
especificada da como resultado que la tarea o proceso se lle!e a cabo.
"l t#rmino algoritmo pro!iene del nombre del matem$tico $rabe Al%horizmi que en el siglo &'
dio las reglas para efectuar las ( operaciones aritm#ticas con nmero decimales.
"l concepto de algoritmo no es nico de la computacin ya que existen algoritmos que
describen toda clase de procesos en la !ida cotidiana. Por ejemplo para realizar el proceso de hacer
un postre la receta se con!ierte en un algoritmo que el procesador ) cocinero* ejecuta para realizar
la tarea o proceso. +tro ejemplo ser,a el msico )procesador* que ejecuta el algoritmo escrito en
una partitura musical para tocar una sonata de -ach.
"stos ejemplos algor,tmicos implican en su ejecucin algunos pasos b$sicos del algoritmo
como .batir hue!os . o .leer la cla!e de la partitura/.
Un algoritmo !iene caracterizado por las siguientes propiedades0
NATURALEZA DETERMINSTICA:
Un algoritmo debe formularse como una secuencia finita de pasos que dan el
procedimiento exacto que ha de seguirse para a partir de una entrada determinada obtener la
correspondiente salida independientemente de quien lo ejecuta. 1e trata por tanto de un
procedimiento .no ambiguo/ en el que no debe existir la menor duda de como ejecutar cada
paso del algoritmo.
INITUD
2odo algoritmo debe necesariamente concluir en un nmero finito de pasos. 3a
condicin de terminacin o no de un proceso es una de sus caracter,sticas b$sicas. Una gran
fuente de errores en el dise4o de algoritmos es que bajo determinadas circunstancias el
proceso que se describe puede no terminar nunca mientras que nosotros suponemos que
acabar$.
1upongamos que queremos conseguir 5 milln de euros y para ello seguimos el
siguiente procedimiento0
&r al bingo con 5666 euros y jugar hasta que 0
a* 7onsigamos el milln de euros
b* Perdamos todo el dinero.
"s f$cil entender que este procedimiento )que no algoritmo* no cumple la condicin de
finitud. -asta obser!ar que puede darse el caso en el que no ganemos nunca el milln de euros
y que no perdamos todo el dinero con lo cual el procedimiento no acabar,a.
INTRODUCCIN AL DISEO DE ALGORITMOS
GENERALIDAD
Un algoritmo es una nica lista de instrucciones definiendo un proceso que puede ser
lle!ado a cabo sobre cualquier conjunto de datos iniciales y que en cada caso da el resultado
correcto. "s decir un algoritmo dice como resol!er no slo un problema particular sino toda
una clase de problemas similares.
Por ejemplo si tenemos un algoritmo que nos permite ordenar de mayor a menor una
secuencia de nmeros la descripcin del mismo debe ser independiente de cuales son los
nmeros de la secuencia en concreto de cada ejecucin del algoritmo. "ste algoritmo deber$
resol!er el problema para todas las secuencias de nmeros que le suministremos como
entrada.
8e forma sint#tica las etapas comunes a la resolucin de un problema por medio de un programa
podr,an ser las siguientes0
"n primer lugar hay que concretar el problema. Para ello se usa el lenguaje natural. "l resultado
de esta etapa que tiene como objeto la eliminacin de ambig9edades es la obtencin del enunciado
del problema. "l enunciado expresa la descripcin del problema en un lenguaje no ambiguo pero
que no dice nada acerca de su resolucin.
1eguidamente necesitaremos encontrar un algoritmo que resuel!a el problema es decir expresar
en forma din$mica los pasos necesarios para la resolucin del problema.
:inalmente hay que expresar el algoritmo en un lenguaje comprensible para el computador es
decir en un lenguaje de programacin. "l algoritmo as, expresado recibe el nombre de programa.
PRO!LEMA """"# ENUNCIADO""""#ALGORITMO""""# PROGRAMA
Pro$l%m&: 1upongamos que queremos realizar el c$lculo de una nmina. "ste ser,a el problema.
E'(')i&*o:
Hay que calcular la nmina de un empleado.
5* 3os datos ) nombre apellidos salario bruto* est$n en el fichero '.
;* <ueremos recibir una hoja impresa con la identificacin del empleado y el detalle de
salario bruto neto y descuento.
Algoritmo:
Paso50 3eer nombre apellidos y salario bruto del fichero '
Paso ;0 7alcular descuentos ) impuesto a cuenta seguridad social derechos pasi!os*
Paso =0 &mprimir nombre y apellidos salario bruto salario neto y descuentos.
Progr&m&:
3a expresin de ese algoritmo en un lenguaje de programacin. 8e esta manera ser$ totalmente
comprensible para el computador.
INTRODUCCIN AL DISEO DE ALGORITMOS
;. PROCEDIMIENTO DE REINAMIENTO DE ALGORITMOS POR PASOS SUCESI+OS
3as dificultades para dise4ar algoritmos se hacen mayores cuando el procesador es un
computador ya que las m$quinas no tienen la intuicin o el sentido comn para darse cuenta que el
algoritmo puede no describir de manera precisa el proceso. Un fallo comn en el dise4o de
programas es que el algoritmo describe casi el proceso a realizar pero no exactamente.
Un ejemplo podr,a ser el de un amigo que nos explica como llegar a su casa. "l algoritmo que
nos da es0 .gira a la derecha en la tienda sigue derecho hasta el prximo cruce a continuacin
toma la tercera calle a la izquierda.../ "s posible que este algoritmo omita algn peque4o detalle
que es crucial como por ejemplo >"n cu$l tienda giro?. 7omo el procesador es humano y con
sentido comn probablemente suficiente para reconocer el error y actuar en consecuencia
desgraciadamente los ordenadores no est$n equipados con esta caracter,stica.
+tro fallo comn puede ser que la ejecucin normal del algoritmo realiza el proceso deseado pero
bajo ciertas circunstancias ) no pre!istas o pasadas por alto por el dise4ador* no lo hace. Por
ejemplo imaginemos un algoritmo que calcula el tiempo de !uelo de un a!in a partir del libro de
horarios de una compa4,a a#rea0
5. @irar el tiempo de salida
;. @irar el tiempo de llegada
=. Aestar el tiempo de salida del tiempo de llegada
"ste algoritmo normalmente dar$ el resultado correcto pero fallar$ si los puntos de partida y
llegada est$n en zonas horarias diferentes.
Hay pues que tener en cuenta a la hora de dise4ar que se debe tener un gran cuidado a la hora de
describir con precisin el proceso deseado y considerar todas las circunstancias posibles.
1i el proceso es complejo la tarea del dise4ador es realmente dif,cil y tendr$ muy pocas
probabilidades de #xito a menos que adopte un procedimiento rigurosamente metdico. A
continuacin !amos a describir un enfoque de este tipo llamado refinamiento por pasos sucesi!os )
an$lisis descendente o topBdoCn*
3a idea base es di!idir el proceso en una serie de pasos donde cada uno de los cuales se puede
describir por un algoritmo que es m$s peque4o y m$s simple que el proceso entero.
3os subalgoritmos pueden a su !ez estructurarse en otros m$s peque4os que se expresan con
mayor detalle y precisin. "l refinamiento del algoritmo continua hasta que cada paso est$
suficientemente detallado y preciso para permitir su ejecucin en el procesador que lo lle!ar$ a
cabo.
INTRODUCCIN AL DISEO DE ALGORITMOS
1upongamos como ejemplo un robot que queremos que acte como mayordomo y nos haga una taza
de caf# instant$neo. Habr$ que especificarle un algoritmo que describa como hacerlo.
Una 5D !ersin del algoritmo podr,a ser0
5. her!ir agua
;. poner caf# en la taza
=. a4adir agua a la taza
1eguramente los pasos de este algoritmo no est$n suficientemente detallados como para permitir
que el robot sea capaz de interpretarlos. Por esto cada paso debe refinarse en una secuencia de
acciones m$s simples y especificadas con m$s detalle que las tareas iniciales.
As, el paso
5. her!ir agua
Podr,a refinarse en0
5.5 llenar la cafetera con agua
5.; conectar la cafetera
5.= esperar hasta que el agua hier!a
5.( desconectar la cafetera
8e la misma forma el paso0
;. poner caf# en la taza
1e podr,a refinar0
;.5 Abrir el tarro del caf#.
;.; "xtraer una cucharada de caf#
;.= Eolcar la cucharada en la taza.
;.( 7errar el tarro de caf#.
F =. A4adir agua a la taza
Podr,a refinarse en0
=.5 Eerter agua de la cafetera en la taza hasta que se llene.
INTRODUCCIN AL DISEO DE ALGORITMOS
8e esta forma el algoritmo se ha refinado en = subalgoritmos que se ejecutan secuencialmente. 1i el
robot es capaz de interpretar todos los pasos del algoritmo se podr,a para y el dise4o del algoritmo
ser,a completo. 1in embargo algunos pasos del algoritmo pueden ser demasiado complejos an para
el robot y necesitan refinarse0
As, el paso0 5.5 3lenar la cafetera con agua.
Podr,a refinarse0
5.5.5.BPoner la cafetera debajo del grifo.
5.5.;.B Abrir el grifo.
5.5.=.B "sperar a que la cafetera est# llena.
5.5.(.B 7errar el grifo.
:inalmente despu#s de una serie de refinamientos cada paso del algoritmo ser$ interpretable por el
robot. "n este momento el algoritmo est$ completo.
Gher!ir aguaH
5.5.5.BPoner la cafetera debajo del grifo.
5.5.;.B Abrir el grifo.
5.5.=.B "sperar a que la cafetera est# llena.
5.5.(.B 7errar el grifo.
5.;.B 7onectar la cafetera
5.=.B "sperar hasta que el agua hier!a
5.(.B8esconectar la cafetera
Gponer caf# en la tazaH
;.5 Abrir el tarro del caf#.
;.; "xtraer una cucharada de caf#
;.= Eolcar la cucharada en la taza.
;.( 7errar el tarro de caf#.
GA4adir agua a la tazaH
=.5 Eerter agua de la cafetera en la taza hasta que se llene.
7uando se usa este m#todo de refinamiento el dise4ador debe por supuesto conocer donde pararI
debe saber cuando un paso est$ suficientemente detallado como para no necesitar m$s refinamiento.
"sto significa por supuesto que debe saber que clase de pasos puede interpretar el procesador. "n el
ejemplo hemos supuesto que el robot es capaz de interpretar .conectar la cafetera/ y no necesita m$s
refinamiento pero sin embargo .llenar de agua la cafetera/ no lo interpreta y ha habido que refinarlo.
"l conocimiento de las capacidades del procesador no solo es necesario para refinar el algoritmo
sino tambi#n para dirigir el camino en el que este progresa. 1i el dise4ador conoce que el procesador
puede interpretar un tipo de pasos encaminar$ la solucin hacia acciones de este tipo.
3as capacidades interpretati!as de un ordenador son algo bastante preciso. Un ordenador puede
interpretar cualquier cosa que est# escrita correctamente en un lenguaje de programacin. As, un
dise4ador refinar$ el algoritmo de tal forma que los pasos se puedan dar en un lenguaje de
programacin apropiado y termina su dise4o cuando cada accin del algoritmo est$ expresada en
dicho lenguaje.
INTRODUCCIN AL DISEO DE ALGORITMOS
,. SECUENCIA
"l algoritmo de hacer caf# es muy directo ya que consiste en una serie de pasos simples que se
ejecutan uno detr$s de otro. 8ecimos que este algoritmo es una secuencia de pasos que cumple que0
5. 3os pasos se ejecutan uno cada !ez.
;. 7ada paso se ejecuta exactamente una sola !ezI ninguno se repite y ninguno se
omite.
=. "l orden en el que se ejecutan es el mismo en el que se escriben
(. 3a terminacin del ltimo paso implica la terminacin del algoritmo.
Un algoritmo que es una secuencia de pasos es extremadamente inflexible dado que su curso de
ejecucin est$ fijado y no se puede modificar din$micamente en funcin de las circunstancias que
ocurran. ><u# sucede si en el ejemplo del caf# el tarro est$ !ac,o? ) seguramente el robot quedar$
confundido sin saber que hacer o simplemente ser!ir$ una taza de agua caliente*.
"s por esto que resulta ob!io que una combinacin de pasos en secuencia es una estructura muy
primiti!a para un algoritmo y que existen algoritmos que no podemos escribir solamente con pasos de
secuencia. Eamos a !er algunas estructuras m$s flexibles.

-. SELECCIN
Acabamos de !er que si un algoritmo es solamente una secuencia de acciones no hay posibilidad de
modificar su ejecucin. 8e esta forma no podr,amos tratar el caso en el que el tarro de caf# est# !ac,o.
As, se necesita la capacidad de ejecutar un paso tal como0
+btener un nue!o tarro de caf# si el tarro actual est$ !ac,o y en otro caso omitir este paso. "sta
capacidad se llama seleccin. "n el ejemplo del robot mayordomo se conseguir,a reescribiendo el paso
;.5 de la siguiente forma0
;.5.5.B tomar el tarro de caf# de la estanter,a.
;.5.;.B Si el tarro est$ !ac,o
%'to')%. tomar un nue!o tarro de caf#
;.5.=.B <uitar la tapa del tarro.
"l paso importante es el paso ;.5.; que describe tanto la accin a seleccionar )tomar un nue!o tarro
de caf#* como la condicin )el tarro est$ !ac,o* bajo la cual se realiza la seleccin.
"scrito de forma general este tipo de accin ser$0
.i condicin
%'to')%. accin
1i la condicin es cierta entonces se ejecuta la accinI en cualquier otro caso no se ejecuta.
"l procesador debe ser por supuesto capaz de interpretar la condicin en un algoritmo de la misma
manera que hace con las acciones o pasos. Por lo tanto las condiciones tambi#n deben refinarse hasta que
son suficientemente detalladas y precisas para que puedan ser interpretadas por el procesador.
INTRODUCCIN AL DISEO DE ALGORITMOS
/. ITERACIN.
&maginemos un proceso para localizar la direccin de una persona en un lista dado su nombre.
Un posible algoritmo ser,a0
considerar el primer elemento de la lista.
1i es el nombre buscado
entonces extraer direccin
si no considerar el siguiente elemento de la lista
si es el nombre buscado
entonces extraer direccin
si no considerar el siguiente elemento de la lista
si es el nombre buscado
entonces extraer direccin
si no considerar el siguiente elemento de la lista
si...
"l problema de este intento de algoritmo es que no se sabe cuantas !eces tendremos que escribir
el cdigo0
si es el nombre buscado
entonces extraer direccin
si no considerar el siguiente elemento de la lista
Fa que no conocemos en tiempo de dise4o ni el nmero de elementos de la lista ni sabemos si
el nombre buscado est$ en la lista.
+tro ejemplo podr,a ser el caso del siguiente problema0 7alcula el primer nmero primo que es
mayor que nmero natural dado de comienzo.
Un posible algoritmo podr,a ser0
obtener nmero de comienzo
sumar 5
comprobar si es primo
si es primo
entonces escribirlo
si no es primo
entonces sumar 5
comprobar si es primo
si es primo
entonces escribirlo
si no es primo
entonces sumar 5....
8e nue!o no conozco las !eces que deber$ sumar uno y comprobar si es primo ya que no
conozco el nmero de comienzo en tiempo de dise4o.
"sto ejemplos ponen de manifiesto que la secuencia y la seleccin no son suficientes por si
mismas para para expresar algoritmos cuya longitud !aria en funcin de las circunstancias.
&ntroduciremos para resol!er estas situaciones un medio de repetir ciertas acciones en un algoritmo
INTRODUCCIN AL DISEO DE ALGORITMOS
un nmero arbitrario de !eces. 3o haremos usando una instruccin de iteracin basada en las
palabras r%0%tir y 1&.t&. 7uyo forma general de escribirlo puede ser0
repetir
&nstruccin 5
J................
&nstruccin %
hasta condicin de parada
Usando esta instruccin de interaccin podr,amos reescribir el algoritmo anterior0
obtener el nmero de comienzo
repetir
sumar 5
comprobar el nmero para !er si es primo
hasta que el nmero es primo
escribir el nmero.
3a parte del algoritmo entre las palabras r%0%tir y 1&.t& ) cuerpo del bucle* se repite hasta que
se cumple la condicin de parada.
3o potente de esta instruccin es que permite que un proceso de duracin indeterminada sea
descrito por un algoritmo de longitud finita. Hay que asegurarse que la iteracin acaba es decir que
la condicin de parada del bucle se acaba cumpliendo. 2ambi#n es muy importante a la hora de
dise4ar instrucciones iterati!as analizar bien cual ser$ realmente la condicin de parada ya que uno
de los fallos m$s frecuentes es no especificar correctamente la condicin de parada lo que puede
tener efectos desastrosos.
3a instruccin de iteracin R%0%tir..2&.t& es sencilla de entender pero existen situaciones en
las que este tipo de bucles resulta inapropiado. "sto pro!iene del hecho de que la instruccin que
e!alua la salida del bucle )instruccin hasta* se ejecuta despu#s de que el cuerpo del bucle se haya
ejecutado al menos una !ez. "sto puede nos ser lo apropiado como re!ela el ejemplo siguiente0
&maginemos que queremos crear un algoritmo que determine cual es el elemento mayor de una
lista. Podemos escribir para resol!erelo el siguiente algoritmo que a primera !ista parece correcto0
Asignar mayor al primer elemento de la lista.
Aepetir
considerar el siguiente elemento de la lista.
1i elemento K mayor
entonces aginar elemento a mayor
hasta que la lista se acabe
escribir mayor
1i la lista contiene un 5unico elemento cuando se ejecute por primera !ez la instruccin
.considerar el siguiente elemento de la lista/ dicho elemento no existir$. 3uego este algoritmo est$
m$l dise4ado. As, pues se hace necesario cambiar la forma de realizar la e!aluacin de la condicin
de terminacin. "sto se soluciona e!aluando la condicin de terminacin del bucle la comienzo del
mismo de forma que el procesador pueda no ejecutar el cuerpo del bucle si la condicin de
terminacin ya es !erdadera.
INTRODUCCIN AL DISEO DE ALGORITMOS
Una notacin apropiada para esto ser,a0
Asignar a mayor el primer elemento de la lista.
mientras no se acabe la lista hacer
considerar el siguiente elemento de la lista.
1i numero K mayor
entonces asignar numero a mayor
fin mientras
escribir mayor.
"scrito de forma general esta instruccin de iteracin ser,a0
mientras condicin
hacer
cuerpo del bucle
fin mientras
"xiste otra instruccin de iteracin para aquellos casos en los que se conoce el nmero de
iteraciones que el bucle realizar$ antes de que se ejecute.
Por ejemplo un algoritmo para calcular la nBesima potencia de un nmero natural x contendr$
un bucle en el que x se multiplica por si mismo. +b!iamente este bucle se ejecutar$ exactamente n
!eces.
"ste algoritmo podr,a expresarse0
obtener !alores x y n
asignar a producto el !alor 5
repetir n !eces
multiplicar producto por x
fin repetir
escribir producto
"scrito de forma general esta instruccin de iteracin ser,a0
repetir n !eces
cuerpo del bucle
fin repetir
INTRODUCCIN AL DISEO DE ALGORITMOS
3. RE+ISIN DE ESTRUCTURAS DE SECUENCIA4 SELECCIN E ITERACIN.
Hemos !isto las tres formas b$sicas para la construccin de algoritmos0 la secuencia la
seleccin y la iteracin. "stas tres formas son suficientes de hecho para construir cualquier
algoritmo.
"xplicado de forma m$s precisa podemos decir que0
Si %. 0o.i$l% )o'.tr(ir (' &lgoritmo 0&r& *%.)ri$ir (' 0ro)%.o 0&rti)(l&r4 %'to')%. t&l
&lgoritmo .% 0(%*% )o'.tr(ir (tili5&'*o 6'i)&m%'t% l&. %.tr()t(r&. *% .%)(%')i&4 .%l%))i7' %
it%r&)i7'.
"sto significa que usando estas tres estructuras podemos desarrollar algoritmos de cualquier
naturaleza. Lo obstante existen otras construcciones suplementarias de estas tres que simplifican el
trabajo del dise4o de algoritmos.