Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Cap 4
Cap 4
Programacin Dinmica
4.1 Introduccin
Los problemas de anlisis sintctico, en gramticas regulares no
deterministas (en las cuales se centra este captulo), implican generalmente
una bsqueda no trivial en el espacio de todas las posibles derivaciones. Esto
es an ms inevitable en tanto en cuanto, en la mayora de los casos
prcticos, es imposible transformar una gramtica no determinista en su
correspondiente determinista, dado el enorme coste espacial (nmero de
no-terminales o estados) que usualmente ello implica. El problema es
especialmente agudo en reconocimiento sintctico de formas, pues
normalmente es necesario emplear gramticas correctoras de errores, las
cuales son innatamente no deterministas, y/o gramticas estocsticas, en las
cuales el anlisis sintctico consiste de por s en el anlisis de todas las
posibles derivaciones (puesto que, en general, todas las reglas tienen alguna
probabilidad de ser usadas). Las tcnicas utilizadas en la prctica para llevar a
cabo esta bsqueda en el espacio de derivaciones, se agrupan dentro del
conjunto de algoritmos y tcnicas de optimizacin conocido como
Programacin Dinmica (PD).
Las tcnicas de programacin dinmica resultan aplicables dado que el
problema de anlisis sintctico en gramticas regulares cumple el principio
de optimalidad de Bellman. Una vez comprobado esto, el problema es
sencillamente resoluble, con complejidad polinmica si se utilizan las
verisones iterativas de los algoritmos, slo con plantear el anlisis sintctico
como la bsqueda de un camino ptimo en un grafo multi-etapa (conocido
como celosa o retculo, o ms usualmente por su nombre ingls:
trellis).
Captulo 4: Programacin Dinmica
52
4.2 Principio de optimalidad
En este contexto, "optimizar" equivale a seleccionar (buscar) la mejor
solucin de entre muchas posibles alternativas. Este proceso de
optimizacin puede ser visto como una secuencia de decisiones que nos
proporcionan la solucin correcta. Si, dada una subsecuencia de decisiones,
siempre se conoce cual es la decisin que debe tomarse a continuacin para
obtener la secuencia ptima, el problema es elemental y se resuelve
trivialmente tomando una decisin detrs de otra, lo que se conoce como
estrategia voraz.
A menudo, aunque no sea posible aplicar la estrategia voraz, se cumple
el principio de optimalidad de Bellman [Bellman,57]: dada una secuencia
ptima de decisiones, toda subsecuencia de ella es, a su vez, ptima. En este
caso sigue siendo posible el ir tomando decisiones elementales, en la
confianza de que la combinacin de ellas seguir siendo ptima, pero ser
entonces necesario explorar muchas secuencias de decisiones para dar con la
correcta, siendo aqu donde interviene la programacin dinmica.
Contemplar un problema como una secuencia de decisiones equivale a
dividirlo en subproblemas de talla inferior, en principio ms fcilmente
resolubles. Ello se enmarca en el mtodo de Divide y Vencers
[Horowitz,78], tcnica similar a la de Programacin Dinmica. La
programacin dinmica se aplica cuando la subdivisin de un problema
conduce a:
Una enorme cantidad de subproblemas.
Subproblemas cuyas soluciones parciales se solapan.
Grupos de subproblemas de muy distinta complejidad.
circunstancias que en conjunto o por separado, llevaran a una complejidad
exponencial de la estrategia "Divide y Vencers".
Captulo 4: Programacin Dinmica
53
4.3 Relacin de recurencia, versin iterativa
La versin recursiva del mtodo de programacin dinmica se resume
en el siguiene esquema:
Esquema PDR(D:d):r
Auxiliar contorno:dB inicializa:dr :rrr
elemental:ddr decide:C
r
r
descompone:dC
dd
Mtodo
si contorno(D) entonces devuelve inicializa(D)
sino
devuelve decide
(Z,z)descompone(D)
{PDR(Z)elemental(Z,z)}
finsi
fin PDR
La idea del mtodo consiste en subdividir el problema D en un conjunto
de pares de subproblemas, uno trivial (resuelto mediante "elemental") y
otro de complejidad menor que D, que a su vez se subdivide en pares de
subproblemas y as sucesivamente. La recursin prosigue hasta alcanzar el
problema de talla mnima (detectado por "contorno") cuya solucin
devuelve "inicializa". En cada paso, "decide" escoge, de entre todas las
subdivisiones del problema proporcionadas por "descompone", aquella que
nos lleva a la solucin ptima. va combinando las soluciones
elementales, proporcionando el resultado cuando se deshace la recursin.
Dos puntos deben resaltarse en este esquema:
Puede ocurrir que se tenga que resolver varias veces el mismo
subproblema, al presentarse ste en varias ramas distintas de la
recursin, lo que en el caso general nos llevar a una complejidad
exponencial.
La solucin obtenida es ptima slo en el sentido indicado por
"decide", cambiando esta funcin se pueden obtener resultados
completamente distintos, cada uno ptimo a su manera.
Con el fin de reducir la complejidad de exponencial a polinmica,
evitando recalcular subproblemas ya calculados, se transforma este esquema
recursivo en uno iterativo:
Captulo 4: Programacin Dinmica
54
Esquema PDI(D:d):r
Auxiliar contorno:dB inicializa:dr :rrr
elemental:ddr decide:C
r
r
descompone:dC
dd
siguiente:dd
d
o
:d /*Primer subproblema (segn siguiente)
no en contorno*/
Variables d:d
G:C
dr
/*Almacn de resultados intermedios,
indexado por d*/
Mtodo
dd si contorno(d) entonces G[d]:=inicializa(d)
fin
si contorno(D) entonces
d:=d
o
bucle
G[d]:= decide
(Z,z)descompone(d)
{G[Z]elemental(Z,z)}
si d=D entonces salirbucle finsi
d:=siguiente(d)
finbucle
finsi
devuelve G[D]
fin PDI
La funcin "siguiente" ordena el espacio de subproblemas de tal
manera que todo problema menor que uno dado se resuelve antes. Los
problemas que no tienen subproblemas menores se resuelven al
principio mediante "inicializa"; a partir de ellos los dems problemas se
calculan siguiendo el orden definido y almacenando los resultados
intermedios en G. De esta manera, cuando en cada punto se deba resolver
un conjunto de subproblemas para que "decide" pueda escoger entre ellos,
todos los subproblemas menores ya habrn sido resueltos y sus resultados se
hallarn disponibles en G. La solucin a cada subproblema se obtiene
entonces evaluando un subproblema elemental y combinndolo mediante
con un resultado contenido en G.
En la figura 4.1 se muestra la resolucin por PD (en su versin iterativa y
recursiva) del problema de encontrar el camino de coste mnimo entre dos
vrtices de un grafo dirigido y ponderado en forma de cuadrcula.
Asumiendo costes unitarios para las operaciones elementales, la
complejidad temporal de la versin iterativa de programacin dinmica es
O(km), donde k es el mximo nmero de subproblemas en los que se
puede subdividir un subproblema y m es el nmero de subproblemas
"diferentes" del problema a resolver:
Captulo 4: Programacin Dinmica
55
aaa
Versin Recursiva (coste exponencial):
C(i,j) = min { C(i-1,j) + ph(i,j), C(i,j-1) + pv(i,j) }
Contorno: C(0,j)=0; C(j,0)=0; j
Versin Iterativa (coste polinmico):
Misma operacin, pero recorriendo la cuadrcula en orden
creciente de (i,j)
(i,j)
(1,1)
i
j
Funcin " siguiente"
(i,j)
i
j
Subpr oblema Elemental: cos to ph(i,j)
Subpr oblema Elemental:
cos to pv(i,j)
Contor no
Subpr oblemas a r esolver
para r esolver (i,j)
Contor no
(1,1)
Figura 4.1 Versin Recursiva e Iterativa de un problema simple de PD (camino de coste mnimo en la
Cuadrcula entre (1,1) e (i,j) en un grafo dirigido y ponderado) [Torr,89].
k=max
dd
descompon(d); m={dd: d<D contorno(d)}
La complejidad espacial, debida en su totalidad a G, es obviamente O(m).
Captulo 4: Programacin Dinmica
56
4.4 Programacin Dinmica y autmatas
El anlisis sintctico en gramticas regulares no deterministas se basa en
un problema tpicamente resoluble mediante programacin dinmica: la
bsqueda del camino de coste mnimo (o mximo) en un grafo multietapa.
4.4.1 Grafos multi-etapa
Se define un grafo dirigido G=(V,A) como un conjunto V devrtices
(tambin llamados nodos) y un conjunto A={(u,v): uV, vV} de arcos. Si
el grafo es ponderado, habr adems un peso (definido en el conjunto r)
asociado a cada arco: p:Ar. Un grafo multietapa es un grafo en el que
(figura 4.2):
El conjunto de vrtices est particionado en K etapas:
V=
i=1..K
V
i
V
i
V
j
= ; i,j=1,,K; ij; k2
Todos los arcos se producen entre etapas adyacentes y en el mismo
sentido:
(u,v)A $i, 1iK-1 : uV
i
vV
i+1
Existe un conjunto de vrtices iniciales I V
1
y un conjunto de
vrtices finales F V
K
.
aa
V
1
V
2
V
3
V
4
V
5
1
1 1
F 2 2
2
3
S
4
3 3
9
4
6
4
2
5
5
3
4
5
6
5
7
3
2
1
11
11
7
2
2
Figura 4.2 Un grafo multietapa ponderado de 5 etapas, un estado inicial y uno final. El trazo grueso
indica el camino de mnimo coste [Horowitz,78]. Los arcos en trazo punteado representan el subgrafo del
nodo (3,2).
Captulo 4: Programacin Dinmica
57
Un subgrafo g(j,w) de un grafo multietapa dirigido G es un grafo que
contiene todos los caminos en G que van desde cualquier vrtice inicial
hasta el vrtice w de la etapa V
j
. Se define U
j,w
como el conjunto de todos
los vrtices de una etapa V
j-1
conectados al vrtice w de la etapa V
j
:
U
j,w
= { uV
j-1
: (u,w)A } 1<jK; wV
j
4.4.2 Camino mnimo en un grafo multietapa
Se considera el problema de encontrar un camino que, yendo desde un
vrtice inicial a uno final de un grafo multietapa ponderado, extremice el
coste acumulado C segn cierto operador (suma de pesos, producto de
pesos, operacin booleana...). Para este problema es posible obtener
inmediatamente la relacin de recurrencia que lo resuelve por
programacin dinmica:
C(j,w) =extremiza
uU
j,w
( C(j-1,u) r(u,w) )
Aqu, la funcin "decide" es "extremiza", cada problema de encontrar el
coste extremal C(j,w) en el subgrafo g(j,w) se descompone en los
subproblemas C(j-1,u), asociados a los subgrafos g(j-1,u), uU
j,w
; y en los
subproblemas elementales -arcos- de peso r(u,w). El nmero de
subproblemas es igual al nmero de subgrafos y por lo tanto al de vrtices
(slo consideramos un nico vrtice inicial). El nmero de posibles
decisiones en cada punto depende del nmero de arcos que llegan a un
vrtice. Si M es el nmero medio de arcos por vrtice, la complejidad media
espacial del algoritmo, en su versin iterativa, ser O(VM), siendo
O(V) la temporal.
4.4.3 Trellis
Para todo par (autmata finito, cadena de terminales), es posible asociarle
un grafo multietapa ponderado, conocido con el nombre de trellis (palabra
inglesa para "celosa"), de tal manera que el problema del anlisis sintctico
de la cadena por el autmata se transforma en la bsqueda de un camino
mnimo en dicho grafo.
Dado el autmata A=(V,Q,d,q
o
,F) y lacadena a=a
1
,a
2
,...,a
n
, el trellis
asociado T(V,A) se define de la siguiente manera (figura 4.3):
Captulo 4: Programacin Dinmica
58
Cada etapa tiene tantos vrtices como estados del autmata; hay una
etapa por smbolo de la cadena, ms una inicial:
V=
i=0..n
V
i
V
i
={ (i,q): qQ}
Hay un arco entre el vrtice (j-1,w) de la etapa j-1 y el vrtice (j,u) de
la etapa j si existe una transicin entre el estado u y el estado w del
autmata:
A=
i=1..n
A
i
A
j
={ ((j-1,w),(j,u)) : (j-1,w)V
j-1
;
(j,u)V
j
; u
aV
d(w,a) }
Slo hay un vrtice inicial: el vrtice de la primera etapa que
corresponde al estado inicial del autmata: I={(0,q
o
)}.
El conjunto de vrtices finales est constitudo por aquellos vrtices
de la ltima etapa que corresponden a estados finales del autmata:
F={(n,q):qF}.
Los pesos estn definidos en el dominio de los booleanos, siendo
"verdad" el peso del arco ((j-1,w),(j,u)) si el estado u pertenece a los
sucesores de w cuando aparece el smbolo a
j
de la cadena:
r((j-1,w),(j,u)) = "verdad" ud(w,a
j
)
aa
q
o
q
1
q
2
q
3
a
a
a
a
b
b
q
o
q
1
q
2
q
3
a b b
V
1
V
2
V
3
V
4
Figura 4.3 Un autmata finito y el trellis correspondiente para la cadena "abb" [Torr,89].
En la recursin de programacin dinmica el operador ser el
booleano ("o" lgico), y la funcin "extremiza" podr ser simplemente el
"y" lgico (), con lo que tendremos:
Captulo 4: Programacin Dinmica
59
C(j,q)=
uU
j,q
( C(j-1,u) r((j-1,u), (j,q)) )
El costo C(j,q) ser "verdad" nicamente cuando alguno de los caminos que
lleguen al vrtice (j,q) sea la composicin de transiciones todas ellas con
peso "verdad". En la versin iterativa, la complejidad temporal media de
este algoritmo, es decir la complejidad de un anlisis sintctico en
autmatas no deterministas, ser O(nQ