Está en la página 1de 12

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

B), ya que el nmero de vrtices


es (nQ) y el nmero medio de arcos por vrtice es B=medU
j,q
. La
complejidad espacial es O(nQ).
4.5 El algoritmo de Viterbi
El algoritmo de Viterbi fue inicialmente desarrollado para encontrar,
dada una secuencia de smbolos, la serie de transiciones ms probable entre
los estados de una cadena de Markov necesaria para producir dicha
secuencia [Forney,73]. Este problema es el equivalente markoviano al
anlisis sintctico en una gramtica regular estocstica.
El algoritmo de Viterbi es un caso particular del algoritmo de
Programacin Dinmica utilizado para encontrar un camino extremal en
un grafo multietapa. Al igual que en el caso del anlisis sintctico para
gramticas regulares no deterministas, se recurre a un trellis, pero en este
caso se define la funcin peso, no el dominio de los booleanos, sino en el
intervalo [0..1], puesto que ahora representa la probabilidad de una regla o
transicin:
r( (j-1,u), (j,q) ) [0..1]
y se sustituyen respectivamente las funciones "extremiza" por "max" y
por el producto:
C(j,q) = max
uU
j,q
( C(j-1,u)r((j-1,u), (j,q)) )
Al final del proceso C(n,Q) nos proporciona la probabilidad (de mxima
verosimilitud) de que la cadena analizada pertenezca al lenguaje de la
gramtica.
Captulo 4: Programacin Dinmica
60
4.6 Versin iterativa del algoritmo de Viterbi
La versin iterativa del algoritmo de Viterbi se deriva inmediatamente
de la transformacin recursivo-iterativa expuesta para el esquema general
de Programacin Dinmica. El coste temporal del algoritmo es del mismo
orden que el utilizado en el caso del anlisis sintctico en autmatas no
estocsticos (y no deterministas): O(nQ

B). En cuanto al coste espacial, en


principio de O(nQ), se puede reducir a O(Q) teniendo en cuenta que
en cada etapa slo se requieren los valores de costo de la etapa anterior. Se
puede entonces almacenar slo stos ltimos olvidando los de las etapas
precedentes, ya utilizados; con lo que solo es necesario emplear dos vectores
que se desplazan por el trellis (llamados aqu P y P'), en vez de la matriz G
completa:
Algoritmo VITERBI
Datos /* t es el tipo "estado", s el "smbolo",
A=(V,Q,q
o
,F,d) */
V:C
s
Q:C
t
q
o
:t F:C
t
a=a
1
a
2
a
n
:L
s
resultado R:R
Auxiliar p:tstR /* probabilidad de una transicin */
Variables P,P':C
tR
/* Vectores, indexados por t */
q,q':t
Mtodo
q'Q hacer P'[q']:=0 fin
P'[q
o
]:=1;
para j:=1..a hacer
qQ hacer P[q]:= max
q'd
-1
(q,a
j
)
{P'[q']p(q',a
j
,q)}
fin
P':=P
finpara
R:=max
qF
(P[q])
fin VITERBI
El algoritmo, tal como se describe ms arriba, slo nos proporciona el
coste final (probabilidad) de la derivacin ms probable. Para conocer la
derivacin misma es necesario apuntarse, en cada paso de la recursin, qu
decisin se ha tomado, con el fin de poder luego conocer la secuencia de
reglas (estados) que se han utilizado. Ello incrementa la complejidad
espacial otra vez en una cantidad equivalente al numero de vrtices del
trellis, con lo que nos queda otra vez O(nQ)
Captulo 4: Programacin Dinmica
61
En aplicaciones prcticas es posible reducir drsticamente (en algunos
casos hasta 1/30) el coste temporal mediante la aplicacin simultnea de
varias tcnicas diferentes como pueden ser:
Considerar para la decisin en cada etapa nicamente los estados
alcanzados.
Bsqueda en Haz (Beam Search), en la que slo se consideran los
"mejores" caminos explorados, desechando los dems.
Un estudio detallado de stos y otros mtodos se halla en [Torr,89].
Captulo 4: Programacin Dinmica
62

También podría gustarte