Documente Academic
Documente Profesional
Documente Cultură
Estrategias
de
programacin
Estrategias
de
programacin
ndice
ndice
Introduccin
2-2
Catlogo de algoritmos
Bibliografa
Javier Vlez Reyes jvelez@lsi.uned.es Jos Ignacio Mayorga Toledano nmayorga@lsi.uned .es
Estrategias
de
programacin
Obje6vos
generales
Obje8vos
2-3
Javier Vlez Reyes jvelez@lsi.uned.es Jos Ignacio Mayorga Toledano nmayorga@lsi.uned .es
Estrategias
de
programacin
Introduccin
Introduccin
Todo
algoritmo
pretende
la
realizacin
de
algn
6po
de
tarea
o
clculo.
Las
ms
de
las
veces,
si
dicha
tarea
no
es
trivial,
esto
implica
repe6r
un
conjunto
de
pasos
sencillos
un
cierto
nmero
de
veces
hasta
que
se
cumpla
cierta
condicin,
que
se
conoce
como
condicin
de
terminacin.
Esencialmente,
hay
dos
formas
de
disear
algoritmos
que
desarrollen
tareas
repe66vas,
que
veremos
en
este
tema
ya
que
representan
estrategias
diferentes
para
resolver
el
mismo
problema:
la
recursividad
y
la
iteracin
I. Diseo recursivo de algoritmos
Estrategias de
programacin
2-4
Javier Vlez Reyes jvelez@lsi.uned.es Jos Ignacio Mayorga Toledano nmayorga@lsi.uned .es
Estrategias
de
programacin
Introduccin
Introduccin
I. Diseo recursivo
Los
algoritmos
de
diseo
recursivo
permiten
resolver
un
problema
invocando
dentro
del
cuerpo
de
una
funcin
directa
o
indirectamente
nuevamente
a
la
propia
funcin
sobre
un
conjunto
de
parmetros
actuales
diferentes.
Un
diseo
adecuado
de
este
6po
de
algoritmos
debe
garan6zar
que
la
ejecucin
de
la
funcin
con
unos
parmetros
adecuados
converja
a
la
solucin
de
manera
que
se
garan6ce
la
nalizacin
del
mismo
int
factorial
(int
n)
{
if
(n
==
0)
return
1;
else
return
n
*
factorial
(n
1);
}
Diseo iterativo
2-5
Diseo recursivo
Javier Vlez Reyes jvelez@lsi.uned.es Jos Ignacio Mayorga Toledano nmayorga@lsi.uned .es
Estrategias
de
programacin
Introduccin
Introduccin
I. Diseo iterativo
Diseo iterativo
Diseo recursivo
index
1
2
3
4
5
result
1
2
6
24
120
2-6
Javier Vlez Reyes jvelez@lsi.uned.es Jos Ignacio Mayorga Toledano nmayorga@lsi.uned .es
Estrategias
de
programacin
Diseo
de
algoritmos
recursivos
Casos
El
diseo
requiere
la
denicin
de
una
coleccin
de
casos
que
den
cobertura
a
toda
entrada
leg6ma
de
parmetros
2-7
Tr
funcin
(Tx
x)
{
if
(esCasoBase1
(x))
return
<<resolucin
inmediata
1>>
...
Casos base
if
(esCasoBaseN
(x))
return
<<resolucin
inmediata
N>>
if
(esCasoRecursivo1
(x))
return
<<resolucin
recursiva
convergente
1>>
...
if
(esCasoRecursivoM
(x))
return
<<resolucin
recursiva
convergente
M>>
}
Guarda
La
guarda
del
caso
reeja
las
condiciones
ambientales
que
deben
sa6sfacerse
para
ejecutar
el
caso.
Estn
expresadas
en
trminos
de
los
parmetros
y
deben
ser
disjuntas
entre
s
Casos recursivos
Resolucin
La
resolucin
de
un
caso
indica
las
acciones
que
deben
efectuarse
para
resolver
el
caso.
Si
es
base
la
resolucin
es
inmediata
si
es
recursiva
consiste
en
la
aplicacin
de
una
composicin
de
llamadas
recursivas
Javier Vlez Reyes jvelez@lsi.uned.es Jos Ignacio Mayorga Toledano nmayorga@lsi.uned .es
Estrategias
de
programacin
Diseo
de
algoritmos
recursivos
2-8
Javier Vlez Reyes jvelez@lsi.uned.es Jos Ignacio Mayorga Toledano nmayorga@lsi.uned .es
Estrategias
de
programacin
Diseo
de
algoritmos
recursivos
Divisin
Caso recursivo
La
funcin
de
divisin
genera
a
cada
paso
de
if
(n
==
0)
return
1;
recursin
un
subproblema
else
return
n
*
factorial
(n
1);
de
tamao
una
unidad
menor
que
converge
a
0
}
int
factorial
(int
n)
{
Recursin
Combinacin
Javier Vlez Reyes jvelez@lsi.uned.es Jos Ignacio Mayorga Toledano nmayorga@lsi.uned .es
Estrategias
de
programacin
Diseo
de
algoritmos
recursivos
Recursividad final
return
n
*
f
(n-1)
return
f
(n-1)
+
+
f
(n-k)
return
n
*
f
(n-1)
return
f
(n/2)
return
f
(n/2)
return
n
*
f
(n-1)
Javier Vlez Reyes jvelez@lsi.uned.es Jos Ignacio Mayorga Toledano nmayorga@lsi.uned .es
Estrategias
de
programacin
Diseo
de
algoritmos
recursivos
Funcin sumergida
La
funcin
sumergida
se
expresa
como
una
invocacin
concreta
de
la
funcin
inmersora
ms
general
2 - 11
Funcin inmersora
L a
f u n c i n
i n m e r s o r a
sumerge
a
la
original
puesto
que,
al
ser
ms
general,
con
una
invocacin
par6cular
de
sta
se
da
cobertura
al
problema
Javier Vlez Reyes jvelez@lsi.uned.es Jos Ignacio Mayorga Toledano nmayorga@lsi.uned .es
Estrategias
de
programacin
Diseo
de
algoritmos
recursivos
Tctica de
inmersin
I. Inmersin de parmetros
La
inmersin
de
parmetros
se
reere
a
la
aplicacin
de
la
tcnica
de
inmersin
sobre
los
parmetros
de
entrada
de
la
misma.
Existen
2
6pos
dentro
de
esta
categora
Javier Vlez Reyes jvelez@lsi.uned.es Jos Ignacio Mayorga Toledano nmayorga@lsi.uned .es
Estrategias
de
programacin
Diseo
de
algoritmos
recursivos
Objetivos de
inmersin
2 - 13
Javier Vlez Reyes jvelez@lsi.uned.es Jos Ignacio Mayorga Toledano nmayorga@lsi.uned .es
Estrategias
de
programacin
Diseo
de
algoritmos
recursivos
Objetivos
Diseo
Eficiencia
R. Final
2 - 14
Recorrido
Acumulacin
Resultados
S e
a p l i c a
p a r a
o b t e n e r
recurrencias
con
estructuras
de
datos
est6cas
o
parmetros
constantes
durante
la
ejecucin
S e
i n c l u y e n
p a r m e t r o s
d e
acumulacin
para
evitar
tener
que
combinar
tras
la
ejecucin
de
las
recursiones
de
cada
subproblema
-
-
Javier Vlez Reyes jvelez@lsi.uned.es Jos Ignacio Mayorga Toledano nmayorga@lsi.uned .es
Estrategias
de
programacin
Diseo
de
algoritmos
recursivos
Ejercicios
I. Funcin factorial
2 - 15
V. Suma de un vector
Disee
una
funcin
recursiva
que
calcule
la
suma
de
los
n
primeros
elementos
de
un
vector
de
enteros.
Clasique
la
funcin
Javier Vlez Reyes jvelez@lsi.uned.es Jos Ignacio Mayorga Toledano nmayorga@lsi.uned .es
Estrategias
de
programacin
Diseo
de
algoritmos
itera6vos
La
inicializacin
es
el
paso
preliminar
para
proceder
con
el
diseo
itera6vo
de
algoritmos
Bifurcacin
if (!found) index++;
}
if
(found)
return
index;
else
return
-1;
}
Secuenciamiento
Javier Vlez Reyes jvelez@lsi.uned.es Jos Ignacio Mayorga Toledano nmayorga@lsi.uned .es
Estrategias
de
programacin
Diseo
de
algoritmos
itera6vos
Elementos de los
algoritmos
iterativos
2 - 17
I. Sentencias de asignacin
La
sentencia
de
asignacin
juegan
un
papel
preponderante
en
el
diseo
itera6vo
ya
que
permite
acumular
clculos
parciales
que
representan
el
estado
del
algoritmo
en
ese
punto
A. Encadenamiento secuencial
Las
instrucciones
se
encadenan
secuencialmente
para
que
se
ejecuten
una
detrs
de
otra
II. Sentencias de control de flujo
La
ejecucin
de
instrucciones
puede
ar6cularse
en
secuencia,
bifurca6vamente
o
en
iteracin.
Existen
sentencias
que
permiten
determinar
el
control
de
ujo
Javier Vlez Reyes jvelez@lsi.uned.es Jos Ignacio Mayorga Toledano nmayorga@lsi.uned .es
Estrategias
de
programacin
Diseo
de
algoritmos
itera6vos
Sentencia
de
asignacin
En
el
diseo
itera6vo
las
variables
representan
almacenes
de
datos
en
memoria
que
con6enen
el
valor
resultante
del
cmputo
de
una
expresin.
Este
valor
representa
parcialmente
el
estado
del
algoritmo
en
6empo
de
ejecucin
en
funcin
de
los
elementos
de
entrada
Estado
Cada
sentencia
supone
un
cambio
potencial
en
el
estado
de
la
mquina.
La
asignacin
permite
recogerlo
parcialmente
en
el
valor
de
la
variable
2 - 18
Sentencia;
variable
=
expresin;
Sentencia;
Expresin y variable
Asignacin
Javier Vlez Reyes jvelez@lsi.uned.es Jos Ignacio Mayorga Toledano nmayorga@lsi.uned .es
Estrategias
de
programacin
Diseo
de
algoritmos
itera6vos
Encadenamiento
secuencial
El
modelo
de
ejecucin
por
defecto
es
la
ejecucin
secuencial.
Segn
ste,
las
instrucciones
son
lanzadas
a
ejecucin
de
acuerdo
al
orden
en
que
aparecen
correla6vamente
escritas
en
el
algoritmo
Encadenamiento secuencial
Sentencia;
Sentencia;
Sentencia;
Ejecucin en secuencia
Javier Vlez Reyes jvelez@lsi.uned.es Jos Ignacio Mayorga Toledano nmayorga@lsi.uned .es
Estrategias
de
programacin
Diseo
de
algoritmos
itera6vos
<< bloque-sentencias>>
} else {
...
<< bloque-sentencias>>
default: <<bloque-sentencias>>
If Then Else
Switch - Case
Javier Vlez Reyes jvelez@lsi.uned.es Jos Ignacio Mayorga Toledano nmayorga@lsi.uned .es
Estrategias
de
programacin
Diseo
de
algoritmos
itera6vos
<<inicializacin>>
<<inicializacin>>
expresin-lmite;
while (expresin-lgica ) {
do {
expresin-incremento) {
<< bloque-sentencias>>
<< bloque-sentencias>>
<< bloque-sentencias>>
<< incremento>>
<< incremento>>
} while (expresin-lgica );
For
While
Do - While
Javier Vlez Reyes jvelez@lsi.uned.es Jos Ignacio Mayorga Toledano nmayorga@lsi.uned .es
Estrategias
de
programacin
Diseo
de
algoritmos
itera6vos
Ejercicios
Encuentre
una
solucin
itera6va
para
cada
uno
de
los
problemas
que
se
presentaron
con
anterioridad
I.
Funcin factorial
int j = 0;
int s = 0;
V. Suma de un vector
VI. Producto escalar
2 - 22
s
=
s
+
v[j];
j++;
}
return s;
VIII.Elementos repetidos
// Post: s = v[i]
length
i=0
Javier Vlez Reyes jvelez@lsi.uned.es Jos Ignacio Mayorga Toledano nmayorga@lsi.uned .es
Estrategias
de
programacin
Traduccin
de
algoritmos
recursivos
a
itera6vos
if (j >= n) return w
int j = 0;
int
w
=
0;
while
(j
<
n)
{
w
=
w
+
v[j];
j
=
j
+
1;
}
return
w;
}
2 - 23
Javier Vlez Reyes jvelez@lsi.uned.es Jos Ignacio Mayorga Toledano nmayorga@lsi.uned .es
Estrategias
de
programacin
Traduccin
de
algoritmos
recursivos
a
itera6vos
2 - 24
Javier Vlez Reyes jvelez@lsi.uned.es Jos Ignacio Mayorga Toledano nmayorga@lsi.uned .es
Estrategias
de
programacin
Traduccin
de
algoritmos
recursivos
a
itera6vos
if (n == 0) return r;
int j = n;
return
invertir
((n
/
10),
r
*
10
+
n
%
10);
Stack
<int>
p=new
Stack
<int>();
}
Inicializacin
de
j
como
variable
local
que
representa
el
valor
inicial
del
parmetro
y
de
p
como
pila
vaca
de
trabajo
}
int
k
=
j;
2 - 25
Javier Vlez Reyes jvelez@lsi.uned.es Jos Ignacio Mayorga Toledano nmayorga@lsi.uned .es
Estrategias
de
programacin
Catlogo
de
algoritmos
Catlogo
de
algoritmos
Aunque
encontrar
un
catlogo
de
algoritmos
cannicos
y
recurrentes
es
complejo
dado
su
gran
diversidad,
si
relacionamos
el
diseo
de
algoritmos
con
los
principales
6pos
abstractos
de
datos
que
se
presentaron
en
el
tema
anterior,
es
posible
encontrar
3
categoras
generales
en
la
que
stos
caen
principalmente
de
acuerdo
a
su
propsito
I.
Algoritmos
de
recorrido
El
propsito
de
los
algoritmos
de
recorrido
es
encontrar
una
expresin
lineal
de
los
elementos
almacenados
en
la
estructura
de
datos.
Dependiendo
de
sta
puede
haber
varias
estrategias
de
recorrido
alterna6vas.
El
resultado
es
una
coleccin
ordenada
de
los
elementos
de
la
estructura
Catlogo
de
algoritmos
2 - 26
Javier Vlez Reyes jvelez@lsi.uned.es Jos Ignacio Mayorga Toledano nmayorga@lsi.uned .es
Estrategias
de
programacin
Catlogo
de
algoritmos
Catlogo
de
algoritmos
La
naturaleza
itera6va
o
recursiva
de
los
algoritmos
quede
frecuentemente
inducida
por
la
forma
en
que
el
perl
de
las
operaciones
da
acceso
a
los
datos.
A
lo
largo
de
este
curso
repasaremos
los
principales
6pos
de
algoritmos
recorrido,
bsqueda
y
ordenacin
aplicables
sobre
cada
uno
de
los
6pos
abstractos
de
datos
que
estudiaremos
Recorrido
Bsqueda
Ordenacin
Listas*
Recorrido
directo
Recorrido
inverso
Bsqueda
secuencial
Insercin
Merge
sort
Pilas
Recorrido
desde
la
cima
Bsqueda
secuencial
Colas
Recorrido
hacia
el
nal
Bsqueda
secuencial
Arboles
Preorden,
inorden,
postorden
Recorrido
en
anchura
Bsqueda
binaria
Ordenacin
2 - 27
Javier Vlez Reyes jvelez@lsi.uned.es Jos Ignacio Mayorga Toledano nmayorga@lsi.uned .es
Estrategias
de
programacin
Bibliograha
BibliograOa
Bibliografa bsica
Estructuras de datos en java. Weiss, Mark
Allen. Pearson Addison Wesley. ISBN
9788478290352
2 - 28
Javier Vlez Reyes jvelez@lsi.uned.es Jos Ignacio Mayorga Toledano nmayorga@lsi.uned .es
Estrategias
de
programacin
Bibliograha
BibliograOa
Bibliografa complementaria
Programacin metdica. BALCZAR, J. L.
McGraw-Hill, 1993. ISBN 8448119576
2 - 29
Javier Vlez Reyes jvelez@lsi.uned.es Jos Ignacio Mayorga Toledano nmayorga@lsi.uned .es