You are on page 1of 13

TECNICAS ALGORITMICAS

Algoritmos voraces (greedy): seleccionan los elementos ms prometedores del


conjunto de candidatos hasta encontrar una solucin. En la mayora de los
casos la solucin no es ptima.
Algoritmos paralelos: permiten la divisin de un problema en subproblemas de
forma ue se puedan ejecutar de forma simultnea en varios procesadores.
Algoritmos probabilsticos: algunos de los pasos de este tipo de algoritmos
estn en funcin de valores pseudoaleatorios
Algoritmos determinsticos: El comportamiento del algoritmo es lineal: cada
paso del algoritmo tiene !nicamente un paso sucesor y otro ancesor.
Algoritmos no determinsticos: El comportamiento del algoritmo tiene forma de
rbol y a cada paso del algoritmo puede bifurcarse a cualuier n!mero de
pasos inmediatamente posteriores" adems todas las ramas se ejecutan
simultneamente.
#ivide y vencers: dividen el problema en subconjuntos disjuntos obteniendo
una solucin de cada uno de ellos para despu$s unirlas" logrando as la
solucin al problema completo.
%etaheursticas: encuentran soluciones apro&imadas (no ptimas) a problemas
basndose en un conocimiento anterior (a veces llamado e&periencia) de los
mismos.
'rogramacin dinmica: intenta resolver problemas disminuyendo su coste
computacional aumentando el coste espacial.
(amificacin y acotacin: se basa en la construccin de las soluciones al
problema mediante un rbol implcito ue se recorre de forma controlada
encontrando las mejores soluciones.
)uelta Atrs (Backtracking): se construye el espacio de soluciones del
problema en un rbol ue se e&amina completamente" almacenando las
soluciones menos costosas.
REGLAS PARA LA ESCRITURA ALGORITMICA
'ara escribir los algoritmos primero debemos seguir una serie de reglas para una
respuesta eficiente.
Sangras
*as instrucciones ue apare+can debajo de ,inicio- deben tener una sangra mayor
ue dicha instruccin. .sta sangra se mantendr hasta la aparicin del ,fin-
correspondiente. Esto es particularmente importante cumplirlo si e&isten varios
bloues inicio/fin anidados. Asimismo" un algoritmo es ms fcil de leer si los
comentarios tienen todos la misma sangra.
Ejemplo: Escribir un algoritmo ue determine" entre dos n!meros A y 0" cul es el
mayor o si son iguales. 1bserve bien las sangras de cada bloue de instrucciones" as
como la posicin alineada de los comentarios.
algoritmo comparar
// Funcin: Comparar dos nmeros A y B
variables
A,B son enteros
inicio
leer (A) // leemos los dos nmeros del teclado
leer (B)
si (A == B) entonces // los nmeros son iguales
inicio
escribir (!os dos nmeros son iguales)
"in
si#no // los nmeros son distintos, as$ %ue
inicio // vamos a compararlos entre s$
si (A & B) entonces
inicio // A es mayor
escribir (A es mayor %ue B)
"in
si#no
inicio // B es mayor
escribir (B es mayor %ue A)
"in
"in
"in
Prescindir de inicio y !in
2uando un bloue de instrucciones slo contiene una instruccin" podemos escribirla
directamente" sin necesidad de encerrarla entre un ,inicio- y un ,fin-. Esto suele
redundar en una mayor facilidad de lectura.
Ejemplo: (epetiremos el mismo ejemplo anterior" prescindiendo de los ,inicio- y ,fin-
ue no sean necesarios. 3jese en ue el algoritmo es ms corto y" por lo tanto" ms
fcil de leer y entender.
algoritmo comparar
// Funcin: Comparar dos nmeros A y B
variables
A,B son enteros
inicio
leer (A) // leemos los dos nmeros del teclado
leer (B)
si (A == B) entonces // los nmeros son iguales
escribir (!os dos nmeros son iguales)
si#no // los nmeros son distintos, as$ %ue
inicio // vamos a compararlos entre s$
si (A & B) entonces
escribir (A es mayor %ue B)
si#no
escribir (B es mayor %ue A)
"in
"in
Ti"ogra!a
En muchos te&tos" se resaltan las palabras clave del lenguaje de programacin en
negrita" para distinguirlas de identificadores de variable" smbolos" etc. %uchos
editores de te&to pensados para escribir programas con ellos tambi$n lo hacen"
utili+ando diversos colores para distinguir los elementos entre s. Esto aumenta la
legibilidad del algoritmo" aunue tiene sus detractores.
'ara escribir algoritmos con un procesador de te&to convencional o usando
pseudocdigo" es conveniente ue usar una fuente de tamao fijo (el tipo 2ourier va
bastante bien).
Es"acios
1tro elemento ue aumenta la legibilidad es espaciar suficientemente (pero no
demasiado) los distintos elementos de cada instruccin. 'or ejemplo" esta instruccin
ya es bastante complicada y difcil de leer:
si (a & b) y (c & d ' rai(()) ) entonces a = ) * +,- ' b
'ero se lee mucho mejor ue esta otra" en la ue se han suprimido los espacios
(e&cepto los imprescindibles):
si(a&b)y(c&d'rai(()))entonces a=)*+,-'b
Al ordenador le dar igual si escribimos (a 4 b) o (a4b)" pero a cualuier programador
ue deba leer nuestro cdigo le resultar mucho ms cmoda la primera forma.
'or la misma ra+n" tambi$n es conveniente dejar lneas en blanco entre
determinadas instrucciones del algoritmo cuando se considere ue mejora la
legibilidad.
Identi!icadores
A la hora de elegir identificadores de variables (o de constantes) es muy importante
utili+ar nombres ue sean significativos" es decir" ue den una idea de la informacin
ue almacena esa variable. 'or ejemplo" si en un programa de nminas vamos a
guardar en una variable la edad de los empleados" es una buena ocurrencia llamar a
esa variable ,edad-" pero no llamarla ,5-" ,A- o ,cosa-.
Ahora bien" dentro de esta poltica de elegir identificadores significativos" es
conveniente optar por auellos ue sean lo ms cortos posible" siempre ue sean
descifrables. As" un identificador llamado ,edad6de6los6empleados- es engorroso de
escribir y leer" sobre todo si aparece muchas veces en el algoritmo" cuando
probablemente ,edad6empl- proporciona la misma informacin. 7in embargo" si lo
acortamos demasiado (por ejemplo ,ed6em-) llegar un momento en el uede claro lo
ue significa.
8oda esta idea de significacin de los identificadores es e&tensible a los nombres de
los algoritmos" de las funciones" de los procedimientos" de los archivos y" en general"
de todos los objetos relacionados con un programa.
En ciertos lenguajes e&isten convenciones ms o menos rgidas para formar
identificadores largos. 8ambi$n pueden e&istir acuerdos (escritos o tcitos) en
empresas y organi+aciones" as ue uno debe amoldarse al sitio y al lenguaje. El
objetivo es evitar ue unos programadores usen identificadores del tipo
edad_de_los_empleados" mientras ue otros bauticen a esta variable
edadDeLosEmpleados.
'or !ltimo" se9alar ue muchos lenguajes de programacin distinguen entre
may!sculas y min!sculas" es decir" ue para ellos no es lo mismo el identificador
,edad- ue ,Edad- o ,E#A#-. Es conveniente" por tanto" ir acostumbrndose a esta
limitacin. :osotros preferiremos usar identificadores en min!scula" por ser lo ms
habitual entre los programadores de lenguaje 2.
CUERPO BASICO #E UN ALGORITMO
;n algoritmo de be seguir lo s siguientes pasos:
Enca$e%ado <4 nombre del algoritmo.
Inicio <4 todo algoritmo empie+a con la etiueta =.
#ec&araciones <4 se declaran variables" funciones" etc.
Procesos <4 leer" calcular" imprimir.
'in <4
OPERACIONES BASICAS EN PSEU#OCO#IGO ( #IAGRAMA #E 'LU)O
OPERACIONES EN PSEU#OCO#IGO ( #IAGRAMA #E 'LU)O*
*as operaciones basicas ue se reali+an en pseudocdigo son:
arit+eticas:
> suma
< resta
? multiplicacin
@ division
mod modulo
div division entera
#e co+"araci,n:
A igual
B4 diferente
B menor ue
4 mayor ue
BA menor o igual ue
4A mayor o igual ue
&,gicos:
A:# la e&presin ser verdadera si y solo si ambas e&presiones son
verdaderas
1( la e&presin ser verdadera si al menos una e&presin es verdadera
51( la e&presin ser verdadera si y solo si ambas e&presiones son diferentes
(verdadero y falso" o viceversa)
:18 el valor de la e&presin es la nrgacion de la e&presin original
:ota: la procedencia de los operadores la establecen los par$ntesis.
ESTRUCTURAS #E CONTROL EN PSEU#OCO#IGO ( #IAGRAMA #E
'LU)O
Las estructuras de control permiten modificar el flujo de ejecucin de las
instrucciones de un programa .
Todas las estructuras de control tienen un nico punto de entrada y un nico punto de
salida. Las estructuras de control se puede clasificar en: secuencial, alternativas y
repetitivas.
Estr-ct-ra Sec-encia&
Accin = <4 Accin C <4 Accin D <4 ...
*a solucin del problema consiste en la solucin de subproblemas parciales" en forma
consecutiva. Es decir ue la accin E no se inicia hasta haber terminado la accin E<=.
En muchos casos" para reali+ar la accin E necesitaremos el resultado de la accin E<
=. En nuestra notacin en pseudocdigo" indicaremos las acciones secuenciales
separadas por FGF:
Accin =G
Accin CG
Accin DG
Accin HG
*as acciones propiamente dichas van desde operaciones de entrada@salida (como
ingresar n!meros por teclado o imprimir un n!mero por pantalla)" operaciones
matemticas o de manejo de caracteres" otras estructuras algortmicas y hasta otros
algoritmos ya resueltos (llamado procedimientos" funciones o subrutinas en los
distintos lenguajes). 'or ejemplo: supongamos ue ueremos dividir dos n!meros a y
b
Ingresar n!mero aG
Ingresar n!mero bG
#ividir a y bG
Imprimir el resultadoG
Estr-ct-ra Condiciona&
En este caso la solucin del problema conduce a ue" seg!n se cumpla cierta
condicin o no" se ejecute una u otra de dos acciones diferentes.
7i 2ondicin Entonces
Accin=
7ino
AccinC
3in7i
Ejemplo: mismo problema anterior" pero slo cuando b es distinto de J.
Ingresar n!mero aG
Ingresar n!mero bG
7i b es igual a J
Imprimir mensaje de errorG
7ino
#ividir a y bG
Imprimir el resultadoG
3in7i
Estr-ct-ra Re"etiti.a
En este caso" la solucin del problema consiste en la repeticin de una accin ms
sencilla mientras se cumpla cierta condicin. (esulta evidente ue para ue esta
sucesin de acciones termine" la accin misma debe modificar por lo menos una de
las variables ue intervienen en la condicin. 2ada ve+ ue se ejecuta la accin la
llamaremos iteracin.
%ientras 2ondicin Kacer
Accin
3in%ientras
2omo se observa en el diagrama de bloues" la evaluacin de la condicin se reali+a
antes de ejecutar cada una de las iteracionesG es decir ue si la condicin no se
cumple la primera ve+ ue llegamos a este la+o" la accin no se ejecutar nunca.
Ejemplo: calcular el factorial de un n!mero n.
Ingresar n!mero nG
Iniciali+ar factorial en =G
%ientras n sea mayor ue =
multiplicar factorial por nG
guardar resultado en factorialG
disminuir n en =G
3in%ientras
Imprimir factorialG
:otar ue hasta este momento no hemos hecho mencin de ning!n lenguaje en
particular. Esto se debe a ue el planteo de algoritmos es un paso previo a la escritura
del cdigo del programa. 'or supuesto ue los distintos lenguajes brindan otras
estructuras algortmicas adems de las bsicas ue pueden facilitarnos la vida a la
hora de plantear la solucin ms apropiada.
ESTRUCTURAS #E CONTROL
Las estructuras de control permiten modificar el flujo de ejecucin de las
instrucciones de un programa .
Todas las estructuras de control tienen un nico punto de entrada y un nico punto de
salida. Las estructuras de control se puede clasificar en: secuencial, alternativas y
repetitivas.
cada autor usa su propio pseudocdigo con sus respectivas convenciones. Por ejemplo,
considere la instruccin "Reemplace el valor de la variable x por el valor de la variable
y" algunas de las posibles sinta!is para indicar lo anterior podr"an ser:
asigne a el valor de

#in embargo, independientemente de estas diferencias, se pueden considerar tres


estructuras de control para desarrollar los procedimientos:
SECUENCIAL:
Las instrucciones se siguen en una secuencia fija $ue normalmente viene dada por el
nmero de rengln. %s decir $ue las instrucciones se ejecutan de arriba &acia abajo.
.nstruccin
/

.nstruccin
0

.nstruccin
1

.nstruccin
n

ALTERNATIVAS:
Selectiva
La instruccin selectiva determina si una determinada instruccin se ejecuta o no, segn
el cumplimiento de una condicin P.
'iagrama de flujo $ue muestra el funcionamiento de la instruccin condicional
si P entonces
Instrucciones
/

fin si
La condicin P es una variable booleana o una funcin reducible a booleana (lgica,
)erdadero*+also,. #i esta condicin es cierta se ejecuta Instrucciones
-
, si no es as", .sta
no se ejecuta.
Selectiva doble
La instruccin selectiva reali/a una instruccin de dos posibles, segn el cumplimiento
de una condicin P.
'iagrama de flujo $ue muestra el funcionamiento de la instruccin condicional
si P entonces
Instrucciones
/

si no
Instrucciones
0

fin si
La condicin P es una variable booleana o una funcin reducible a booleana (lgica,
)erdadero*+also,. #i esta condicin es cierta se ejecuta Instrucciones
-
, si no es as",
entonces se ejecuta Instrucciones
0
.
Selectiva mltiple
Tambi.n es comn el uso de una seleccin mltiple $ue e$uivaldr"a a anidar varias
funciones de seleccin.
si Condicin
/
entonces
Instrucciones
/

si no si Condicin
0
entonces
Instrucciones
0

si no si Condicin
n
entonces
Instrucciones
n 2 /

si no
Instrucciones
n

fin si
%n este caso &ay una serie de condiciones $ue tienen $ue ser mutuamente e!cluyentes,
si una de ellas se cumple las dem1s tienen $ue ser falsas necesariamente, &ay un caso si
no $ue ser1 cierto cuando las dem1s condiciones sean falsas.
%n esta estructura si Condicin
-
es cierta, entonces se ejecuta slo Instrucciones
-
. %n
general, si Condicin
i
es verdadera, entonces slo se ejecuta Instrucciones
i
Selectiva mltipleCasos
2na construccin similar a la anterior (e$uivalente en algunos casos, es la $ue se
muestra a continuacin.
seleccionar Indicador
caso Valor
/
:
Instrucciones
/

caso Valor
0
:
Instrucciones
0

caso Valor
n2/
:
Instrucciones
n2/

3en otro caso:
Instrucciones
n
4
Fin seleccionar Indicador
%n este caso &ay un Indicador es una variable o una funcin cuyo valor es comparado
en cada caso con los valores "Valor
i
", si en algn caso coinciden ambos valores,
entonces se ejecutar1n las Instrucciones
i
correspondientes. La seccin en otro caso es
an1loga a la seccin si no del ejemplo anterior.
RE!ETITIVA:
Las instrucciones iterativas abren la posibilidad de reali/ar una secuencia de
instrucciones m1s de una ve/.
'iagrama de flujo $ue muestra el funcionamiento de la instruccin mientras
mientras P hacer
Instrucciones
fin mientras
%l bucle se repite mientras la condicin P sea cierta, si al llegar por primera ve/ al bucle
mientras la condicin es falsa, el cuerpo del bucle no se ejecuta ninguna ve/.
%!isten otras variantes $ue se derivan a partir de la anterior. La estructura de control
hacer se utili/a cuando es necesario $ue las instrucciones de una estructura mientras se
ejecuten al menos una ve/:
hacer
Instrucciones
mientras P
La estructura anterior e$uivaldr"a a escribir
Instrucciones
mientras P hacer
Instrucciones
fin mientras
2na estructura de control muy comn es el ciclo para, la cual se usa cuando se desea
iterar sobre un "ndice i (por convencin se usa i, sin embargo se puede usar cual$uier
identificador,:
para hasta n hacer
Instrucciones
fin para
La cual se define como
mientras hacer
Instrucciones
fin mientras
Por ltimo, tambi.n es comn usar la estructura de control para cada. %sta sentencia se
usa cuando se tiene una lista o un conjunto L y se $uiere iterar por cada uno de sus
elementos:
para cada hacer
Instrucciones
fin para
#i asumimos $ue los elementos de L son , entonces esta sentencia
e$uivaldr"a a
para hasta n hacer
Instrucciones
fin para
#in embargo, en la pr1ctica e!isten mejores formas de implementar esta instruccin
dependiendo del problema.
!RUE"A #E ESCRIT$RI$
2na prueba de escritorio es la comprobacin lgica, de un algoritmo de resolucin, la
cual consiste en &acer un seguimiento manual de los pasos seguidos $ue se definieron
en el pseudocdigo y comprobar, con base en sus datos, si el resultado al cual se llega es
el esperado.
Para desarrollar la prueba de escritorio, se utili/ara el siguiente procedimiento:
3on datos de prueba, se seguir1n cada uno de los pasos propuestos en el algoritmo de
resolucin.
#i la prueba de escritorio genera resultados ptimos, $uiere decir $ue el algoritmo posee
una lgica adecuada, en caso contrario el algoritmo tendr1 $ue ser corregido.
Es posible demostrar ue cualuier problema puede reducirse" utili+ando slo las
siguientes estructuras algortmicas: Estructura secuencial" Estructura condicional y
Estructura repetitiva ( o la+o repetitivo).

You might also like