Вы находитесь на странице: 1из 52

PAII-25: programaci on din amica

Dr. J.B. Hayet


EN MATEMATICAS CENTRO DE INVESTIGACION

Mayo 2008

, J.B. Hayet Programaci on, Mayo 2008 1 / 50

Outline

Caracterizaci on

Mas ejemplos. . .

, J.B. Hayet Programaci on, Mayo 2008 2 / 50

Caracterizaci on

Outline

Caracterizaci on

Mas ejemplos. . .

, J.B. Hayet Programaci on, Mayo 2008 3 / 50

Caracterizaci on

Divide and Conquer


Divide And Conquer es un esquema gen erico para resolver problemas reducibles a la resoluci on de dos (o mas) sub-problemas del grande: mergeSort por ejemplo Pero cuando los sub-problemas no son independientes, un esquema DaC puede ser muy ineciente!
int F( int i ) { i f ( i < 1) return 0 ; i f ( i == 1 ) r e t u r n 1 ; r e t u r n F ( i 1) + F ( i 2); }

, J.B. Hayet Programaci on, Mayo 2008 4 / 50

Caracterizaci on

Problemas no independientes. . .
En cambio, se puede hacer algo mucho mas eciente (lineal):
F[0]=0; F[1]=1; f o r ( i n t i =2; i <=N ; i ++) F [ i ]=F [ i 1]+F [ i 2 ] ;

No requiere tanto espacio (el valor F45 es el maximo representable sobre 32 bits) Eventualmente, se puede usar solo los dos valores previos:
i n t a =0,b =1; i f (N< 1) r e t u r n a ; f o r ( i n t i =2; i <=N ; i ++) { i n t tmp=b ; b+=a ; a =tmp ; }
, J.B. Hayet Programaci on, Mayo 2008 5 / 50

Caracterizaci on

Programaci on din amica


Programaci on din amica bottom-up : el caso previo que resuelve todas las instancias a partir de las mas chicas hasta la nuestra (eventualmente no son todas necesarias) Programaci on din amica top-down: esquema recursivo que expresa el problema como sub-problemas y memoriza sus resultados para re-usarles despues
i n t F( i n t i ){ s t a t i c i n t knownF [ maxN ] ; i f ( knownF [ i ] != 0 ) r e t u r n knownF [ i ] ; int t = i ; i f ( i < 0) return 0 ; i f ( i > 1 ) t = F ( i 1) + F ( i 2); r e t u r n knownF [ i ] = t ; }
, J.B. Hayet Programaci on, Mayo 2008 6 / 50

Caracterizaci on

Programaci on din amica

Se aplica a problemas de optimizaci on, principalmente, cuya soluci on optima tiene estructura entremezclando versiones reducidas del mismo problema Una resoluci on por programaci on dinamica puede se divide en:
1 2 3

caracterizaci on de la estructura de la soluci on optima denici on recursiva de esta soluci on optima calculo bottom-up o top-down de la(s) soluci on(es) optima(s) (implementaci on)

, J.B. Hayet Programaci on, Mayo 2008 7 / 50

Caracterizaci on

Ejemplo: la linea de ensamblado


Linea 1
a11 a12 a13

...

a1N e1

i1 c11 i2 c21 c12 c22 c13 c23

e2 a21 a22 a23

...

a2N

Linea 2

, J.B. Hayet Programaci on, Mayo 2008 8 / 50

Caracterizaci on

Ejemplo: la linea de ensamblado


Dos lineas de ensamblado con propiedades diferentes Realizan las mismas n operaciones de ensamblado pero con costos en tiempo diferentes (costo de la operaci on j de la linea i , aij ) La introducci on inicial de la pieza en una linea i tiene costo ii Despu es de cada operaci on j , en la linea i , se puede mover la pieza a la otra linea: costo del cambio cij Para salir de cada linea i , ei Problema: cual secuencia de operaciones da el costo total m nimo?

, J.B. Hayet Programaci on, Mayo 2008 9 / 50

Caracterizaci on

Ejemplo: la linea de ensamblado

Por fuerza bruta: remarcamos que dado un or aculo que nos da la lista de las elecciones que hacer, el calculo del tiempo es (N ) pero hay 2N posibilidades en total de combinaciones! intractable para N grande

, J.B. Hayet Programaci on, Mayo 2008 10 / 50

Caracterizaci on

Ejemplo: la linea de ensamblado


Estructura de la soluci on: considerar una estaci on de operaci on o1j si j = 1 hay que haber elegido inicialmente la linea 1 si j > 1 podemos venir de la estaci on o1(j 1) sin costo adicional a la secuencia hasta o1(j 1) , o de la estaci on o2(j 1) con un costo adicional a la secuencia hasta o2(j 1) , debido a la transferencia, c2(j 1) en el primer caso, la secuencia tiene que ser optima hasta o1(j 1) (sino habr a contradicci on); en el segundo caso, ser a igual: la secuencia hasta o2(j 1) tiene que ser optima Sub-estructura optima: dada una soluci on, tenemos adentro, en cada punto, una soluci on a sub-problemas

, J.B. Hayet Programaci on, Mayo 2008 11 / 50

Caracterizaci on

Ejemplo: la linea de ensamblado


La estructura de la soluci on es clara: para llegar de la mejor manera a la operaci on o1j podemos:
llegar optimamente a la operaci on o1(j 1) y seguir en esa linea llegar optimamente a la operaci on o2(j 1) y cambiar de linea

para llegar de la mejor manera a la operaci on o1j podemos:


llegar optimamente a la operaci on o2(j 1) y seguir en esa linea llegar optimamente a la operaci on o1(j 1) y cambiar de linea

Nos queda resolver el problema de llegar optimamente a o1(j 1) y o2(j 1) . . .

, J.B. Hayet Programaci on, Mayo 2008 12 / 50

Caracterizaci on

Ejemplo: la linea de ensamblado


Soluci on recursiva: sea tij el tiempo optimo para terminar la operaci on j del objeto en la linea i inicializaci on: j = 1 t11 = i1 + a11 t21 = i2 + a21 terminaci on: el tiempo optimo t entre las dos lineas: t = min{t1N + e1 , t2N + e2 } para j > 1 t1j = a1j + min{t1(j 1) , t2(j 1) + c2(j 1) } t2j = a2j + min{t2(j 1) , t1(j 1) + c1(j 1) }
, J.B. Hayet Programaci on, Mayo 2008 13 / 50

Caracterizaci on

Ejemplo: la linea de ensamblado


Soluci on recursiva: ejemplo
Linea 1
3 4 5 3 2 1 2 1 2 1 3 1 2 2 2 2 1 6

Linea 2

, J.B. Hayet Programaci on, Mayo 2008 14 / 50

Caracterizaci on

Ejemplo: la linea de ensamblado


Soluci on recursiva: valores de tij j t1j t2j 1 2 3 4 4 8 13 12 t = 14 4 6 7 13

Para determinar la soluci on en t erminos de elecciones que hacer, podemos denir lij el numero de la linea que, al llegar en oij , dio el recorrido mas r apido (o sea el arg min en cada paso recursivo) y l el indice de la linea cuya estaci on N da el tiempo total m nimo j l 1j l 2j 2 3 4 1 1 2 l = 1 2 2 2

, J.B. Hayet Programaci on, Mayo 2008 15 / 50

Caracterizaci on

Ejemplo: la linea de ensamblado

Soluci on recursiva: as podemos hacer un traceback de la sucesi on de elecciones optimas: l = 1 entonces terminamos con la estaci on 4 de la linea 1 l14 = 2 entonces seguimos con la estaci on 3 de la linea 2 l23 = 2 entonces seguimos con la estaci on 2 de la linea 2 l22 = 2 entonces seguimos con la estaci on 1 de la linea 2

, J.B. Hayet Programaci on, Mayo 2008 16 / 50

Caracterizaci on

Ejemplo: la linea de ensamblado


Implementaci on: descartar la implementaci on por funci on recursiva normal! La prueba es que si consideras el numero total de referencia hechas a tij , rij , entonces: r1N = 1 r2N = 1 r1j = r1(j +1) + r2(j +1) r2j = r1(j +1) + r2(j +1) se deduce que para todo j , r1j = r2j y r1j = 21 r1(j +1) = 22 r1(j +2) = 2N j r1N En particular, r11 = 2N 1 , eso por el grande traslape entre los sub-problemas
, J.B. Hayet Programaci on, Mayo 2008 17 / 50

Caracterizaci on

Ejemplo: la linea de ensamblado


Implementaci on: la primera buena manera es hacer los c alculos bottom-up con los j crecientes
// I n i t i a l i z a t i o n t [0][0] = a[0][0] + i [0]; t [1][0] = a[1][0] + i [1]; // R e c u r s i o n , botttom up ! f o r ( i n t j =1; j <N ; j ++) { i n t p0 = t [ 0 ] [ j 1] , p1 = t [ 1 ] [ j 1 ] ; // Compute t [ 0 ] [ j ] i f ( p0<p1+c [ 1 ] [ j 1]) { t [ 0 ] [ j ] = p0 + a [ 0 ] [ j ] ; l [ 0 ] [ j ] = 0; } else { t [ 0 ] [ j ] = p1 + a [ 0 ] [ j ] + c [ 1 ] [ j 1 ] ; l [ 0 ] [ j ] = 1 ; }
, J.B. Hayet Programaci on, Mayo 2008 18 / 50

Caracterizaci on

Ejemplo: la linea de ensamblado


// Compute t [ 1 ] [ j ] i f ( p1<p0+c [ 0 ] [ j 1]) { t [ 1 ] [ j ] = p1 + a [ 1 ] [ j ] ; l [ 1 ] [ j ] = 1; } else { t [ 1 ] [ j ] = p0 + a [ 1 ] [ j ] + c [ 0 ] [ j 1 ] ; l [ 1 ] [ j ] = 0 ; } } // F i n a l s t e p i f ( t [ 0 ] [ N1]+e [0] < t [ 1 ] [ N]+ e [ 1 ] ) { t o p t = t [ 0 ] [ N1]+e [ 0 ] ; iopt = 0; } else { t o p t = t [ 1 ] [ N1]+e [ 1 ] ; iopt = 1; }
, J.B. Hayet Programaci on, Mayo 2008 19 / 50

Caracterizaci on

Ejemplo: la linea de ensamblado


Implementaci on: obviamente la complejidad es linear (solo rellenamos un arreglo de dimensi on N ) costo en memoria O (N ) para los fan aticos de la formulaci on recursiva, no desesperar:
int f1 ( int j ) { i f ( v a l f 1 [ j ] > =0) r e t u r n v a l f 1 [ j ] ; i f ( j ==1) r e t u r n ( i [ 0 ] + a [ 0 ] [ 0 ] ) ; v a l f 1 [ j ] = a [ 0 ] [ j ]+ s t d : : min ( f 1 ( j 1) , f 2 ( j 1)+c [ 1 ] [ j 1 ] ) ; return v a l f 1 [ j ] ; }

donde f2 se denir a igual


, J.B. Hayet Programaci on, Mayo 2008 20 / 50

Caracterizaci on

Ejemplo: la linea de ensamblado


Implementaci on: una cosa recurrente en programaci on din amica es que la soluci on no sale directamente, necesita procesar los datos calculados por las recursiones para exhibirla:
i n t k=i o p t ; s t d : : c o u t << O p e r a c i o n << en l i n e a f o r ( i n t j=N 1; j > 0; j ) { k = l [k][ j ]; s t d : : c o u t << O p e r a c i o n << en l i n e a } << N1 << k << e n d l ;

<< j << k << e n d l ;

, J.B. Hayet Programaci on, Mayo 2008 21 / 50

Caracterizaci on

Programaci on din amica: cuando?

La pregunta importante es cu ando usar programaci on y por qu e. Hay dos elementos dos fundamentales que encontrar en el problema: sub-estructura optima grado alto de traslape entre los sub-problemas S el segundo aspecto no esta presente, probablemente el problema se resuelva con Divide And Conquer

, J.B. Hayet Programaci on, Mayo 2008 22 / 50

Caracterizaci on

Sub-estructura optima
Identicar esa sub-estructura optima sigue un patr on com un: 1 identicar las elecciones que forman el problema (ejemplo: cual linea tomar) 2 suponer que una soluci on esta dada, o sea todas las elecciones que hacer conocidas 3 despu es de una de esas elecciones, ver como expresar los sub-problemas (eso guiar a la recursi on) 4 mostrar que esos sub-problemas son a su vez optimos (por contradicci on)

, J.B. Hayet Programaci on, Mayo 2008 23 / 50

Caracterizaci on

Sub-estructura optima
La dicultad principal es bien expresar los sub-problemas, en particular caracterizar el buen espacio de los sub-problemas. Hay que dejarlo lo mas simple posible pero no es siempre posible! caso de la linea de ensamblo: caminos optimos hasta llegar a la estaci on o1j o o2j (1D) caso de la multiplicaci on de matrices: era mas complicado (ver PA-I), para formar dos sub-problemas de misma naturaleza se necesitaba considerar la manera optima de calcular: Mi Mi +1 Mi +2 . . . Mj donde los Mi son matrices di di +1

, J.B. Hayet Programaci on, Mayo 2008 24 / 50

Caracterizaci on

Sub-estructura optima
Recuerdo: expresi on de la combinatoria, en caso de b usqueda exhaustiva: (M1 ...Mi )(Mi +1 ...Mn ) Entonces el numero de posibilidades resultantes es: T1 = Tn =
n 1 i =1

1 Ti Tni
n

4 Son los n umeros de Catalan, asintoticamente ( n 2 ). . . explosivo!

, J.B. Hayet Programaci on, Mayo 2008 25 / 50

Caracterizaci on

Sub-estructura optima
1 2 3

Elecci on elemental: d onde delimitar (una posici on entre 1 y n-1) Suponemos dadas las elecciones optimas Tenemos dos sub-problemas entre 1 y i por una parte, y por i + 1 y N por otra parte. Entonces, no hay manera de considerar solo los sub-problemas de forma [1, i ], necesitamos una forma mas general [i , j ] (o sea 2D y no 1D) Dada una elecci on de delimitaci on en i k < j del sub-problema [i , j ], mostremos que los dos sub-problemas [i , k ] y [k + 1, j ] son a su vez optimos

, J.B. Hayet Programaci on, Mayo 2008 26 / 50

Caracterizaci on

Sub-estructura optima
Sea pij el numero m nimo de productos entre escalares necesarios para calcular Mi . . . Mj Entonces si suponemos que sabemos cual es la mejor manera de poner par entesis en Mi . . . Mj : (Mi . . . Mk )(Mk +1 . . . Mj ) numero de productos para la matriz di dk +1 Mi . . . Mk : pik numero de productos para la matriz dk +1 dj +1 Mk +1 . . . Mj : p(k +1)j para la matriz resultado: pij = pik + p(k +1)j + di dk +1 dj +1 de la formula, sacamos la optimalidad de los dos sub-problemas [i , k ] y [k + 1, j ]
, J.B. Hayet Programaci on, Mayo 2008 27 / 50

Caracterizaci on

Sub-estructura optima
notar que para todo i : pii = 0 para calcular los elementos de una (sub-)diagonal, solo se necesitan elementos de las previas (sub-)diagonales si d = j i > 0 representa la (sub-)diagonal actual, se usa para calcular pij los elementos (i , k ) y (k + 1, j ) con i k < i + d pi (i +d ) = min pik + p(k +1)(i +d ) + di dk +1 di +d +1
i k <i +d

inicializar la diagonal d = 0, luego calcular diagonal por diagonal pi (i +1) = pii + p(i +1)(i +1) + di di +1 di +2
, J.B. Hayet Programaci on, Mayo 2008 28 / 50

Caracterizaci on

Sub-estructura optima
j
1 1 0 2 3 4 5

Complejidad c ubica. . .
, J.B. Hayet Programaci on, Mayo 2008 29 / 50

Caracterizaci on

Sub-estructura optima
j
1 1 0 2 3 4 5

Complejidad c ubica. . .
, J.B. Hayet Programaci on, Mayo 2008 29 / 50

Caracterizaci on

Sub-estructura optima
j
1 1 0 2 3 4 5

Complejidad c ubica. . .
, J.B. Hayet Programaci on, Mayo 2008 29 / 50

Caracterizaci on

Sub-estructura optima
Lo que va a variar seg un el problema (y darle una complejidad particular) es: cu antos sub-problemas son implicados dentro de la soluci on optima cu antas elecciones posibles que examinar Por ejemplo: linea de ensamblado: 1 sub-problema + 2 elecciones posibles productos: 2 sub-problemas + j i elecciones posibles

, J.B. Hayet Programaci on, Mayo 2008 30 / 50

Caracterizaci on

Sub-estructura optima
Como regla pr actica, complejidad total de un problema de tipo dynamic programming: Nsubproblemas Nelecciones
ensamblado: (N ) 1 = (N ) matrices: (N 2 ) O (N ) = O (N 3 )

El costo en cada elecci on es el costo ligado a la elecci on mas el costo de los sub-problemas (eso da el total de arriba, sumando sobre todas las elecciones) Sub-estructuras optimas usadas bottom-up (fundamentalmente diferente de los glotones que hacen decisiones y luego resuelven sub-problemas)
, J.B. Hayet Programaci on, Mayo 2008 31 / 50

Caracterizaci on

Sub-estructura optima
Cuidado a los razonamientos por analog a, que pueden hacer suponer la presencia de sub-estructura optima mientras no hay caminos mas cortos en grafos dirigidos: un camino mas corto de u a v , si pasa por w , sigue entre u y w por una parte y w y v por otra parte el camino mas corto entre esos nodos: s hay sub-estructura optima (ver Floyd. . . ) caminos mas largos en grafos dirigidos: eso no funciona!
a b

no resoluci on por programaci on din amica eciente (NP)


, J.B. Hayet Programaci on, Mayo 2008 32 / 50

Caracterizaci on

Sub-estructura optima
Cual es el problema? los sub-problemas no son independientes! Dada una solucion al problema, si lo comparto en u w v entonces si resuelvo el problema entre u y w la naturaleza del problema es fundamentalmente diferente entre w y v : no puedo reusar los nodos del la soluci on u w en cambio, no hay problema en el caso del camino mas corto porque estoy asegurado que los dos sub-caminos u w y w v no pueden compartir nodos otros que w

, J.B. Hayet Programaci on, Mayo 2008 33 / 50

Caracterizaci on

Sub-estructura optima

en el caso de las matrices, los sub-problemas trabajan sobre conjuntos diferentes de matrices, no hay problema en el caso del ensamblado, solo tenemos un sub-problema que examinar, entonces no hay problema tampoco

, J.B. Hayet Programaci on, Mayo 2008 34 / 50

Caracterizaci on

Traslape
la segunda gran componente de los problemas es el traslape entre los sub-problemas es generalmente ligado al hecho de que el espacio de los sub-problemas es peque no de tal manera que aparezca estos traslapes contrariamente a Divide And Conquer, la programaci on din amica aprovecha del traslape para resolver una y una sola vez cada sub-problema por el uso de la memoria (a trav es de look-up tables) ver el problema de ensamblado: cada sub-problema esta repetido 2N j veces

, J.B. Hayet Programaci on, Mayo 2008 35 / 50

Caracterizaci on

Obtener la soluci on
La u ltima parte es obtener la soluci on como secuencia de elecciones que realizar, con dos posibilidades a partir de los costos optimos, reconstruir la soluci on: puede ser no demasiado costoso en unos casos. En el caso del ensamblado:
i n t k=i o p t ; s t d : : c o u t << O p e r a c i o n << N1 << en l i n e a << k << e n d l ; f o r ( i n t j=N 1; j > 0; j ) { i f ( t [ k ] [ j ]== t [ k ] [ j 1]+a [ k ] [ j 1]) { } else { k = ( k +1)%2; } s t d : : c o u t << O p e r a c i o n << j << en l i n e a << k << e n d l ; } J.B. Hayet Programaci on, Mayo 2008

, 36 / 50

Caracterizaci on

Obtener la soluci on

pero eso no es posible siempre: en el caso de matrices ser a mucho mas complejo almacenar tambi en las elecciones en cada etapa: costoso en memoria pero seguro de funcionar en todo caso (ver los dos ejemplos). Complejidad en memoria igual que la de los costos de sub-problemas

, J.B. Hayet Programaci on, Mayo 2008 37 / 50

Caracterizaci on

Versi on recursiva recortada


Otra formulaci on de la programaci on din amica es la que vimos varias veces: transforma el problema recursivo de tal manera a almacenar los resultados ya calculados: proceso de memoization nalmente igual de almacenamiento (guardamos todos los valores optimas de los sub-problemas), y ademas viene el costo del overhead de las funciones recursivas igual en el caso de matrices

, J.B. Hayet Programaci on, Mayo 2008 38 / 50

Caracterizaci on

Versi on recursiva recortada


i n t m u l t C o s t ( M a t r i x mTab , i n t i , i n t j ) { i f ( c o s t s [ i ] [ j ] ! = s t d : : n u m e r i c l i m i t s <i n t > : : max ( ) ) return c o s t s [ i ] [ j ] ; i f ( i==j ) c o s t s [ i ] [ j ] = 0 ; else { f o r ( i n t k=i ; k< j ; k++) { i n t q = m u l t C o s t (mTab , i , k)+ m u l t C o s t (mTab , k +1, j )+ d [ i 1] d [ k ] d [ j ] ; i f ( q< c o s t s [ i ] j ] ) c o s t s [ i ] [ j ]=q ; } return c o s t s [ i ] [ j ] ; }

, J.B. Hayet Programaci on, Mayo 2008 39 / 50

Caracterizaci on

Versi on recursiva recortada


An alisis r apida: dos casos de llamadas, las que corresponden a c alculos ya hechos y las otras para el segundo tipo habr a (N 2 ) llamadas (una por entrada en la tabla) para el primer caso, est an hechas las llamadas por recursiones por las llamadas del primer tipo, y hay como O (N ) de esos por llamadas en total O (N 3 ) pero por las llamadas recursivas preferir la versi on bottom-up. . . la ventaja es que eventualmente solo una parte de los subproblemas est an resueltos
, J.B. Hayet Programaci on, Mayo 2008 40 / 50

Mas ejemplos. . .

Outline

Caracterizaci on

Mas ejemplos. . .

, J.B. Hayet Programaci on, Mayo 2008 41 / 50

Mas ejemplos. . .

BST optimos

Considerar un BST usado por cualquiera aplicaci on de b usqueda podemos usar un sistema de arbol equilibrado para asegurar tiempo de b usqueda de O (log N ) pero hay aplicaciones en que no todas las llaves tienen la misma frecuencia (pensar por ejemplo en un diccionario de lenguas) queremos un BST construido del tal manera a tener las llaves mas frecuentemente usadas cerca de la ra z

, J.B. Hayet Programaci on, Mayo 2008 42 / 50

Mas ejemplos. . .

BST optimos
v4

v2

v6

v1

v3

v5

valores de llaves vi para 1 i N , en orden creciente intervalos correspondiendo a las hojas di para 0 i N (orden creciente) para cada vi , una probabilidad pi para cada di , una probabilidad qi pi + qi = 1

, J.B. Hayet Programaci on, Mayo 2008 43 / 50

Mas ejemplos. . .

BST optimos
Lo que queremos con un arbol binario de b usqueda optimo es minimizar el tiempo promedio T de las b usquedas:
N N

T =
i =1

(depth(vi ) + 1)pi +
i =0 N

(depth(di ) + 1)qi
N

1+
i =1

depth(vi )pi +
i =0

depth(di )qi

el resultado no es necesariamente equilibrado tampoco necesariamente se va a ubicar la llave mas frecuente en la ra z examinar exhaustivamente las posibilidades seria exponencial

, J.B. Hayet Programaci on, Mayo 2008 44 / 50

Mas ejemplos. . .

BST optimos
Estructura de la soluci on: considerar un BST optimo remarcar primero que todo sub-arbol corresponde a llaves entre vi y vj para i < j , con hojas di 1 , di . . . dj remarcar que si T es optimo entonces todo sub-arbol T es optimo para las llaves que lo componen (el mismo argumento de siempre) ahora, si examinamos entre los posibles vr {vi , vi +1 , . . . vj } formando arboles optimos para vi , . . . , vr 1 de un lado y vr +1 , . . . , vj del otro lado, encontraremos el subarbol optimo

, J.B. Hayet Programaci on, Mayo 2008 45 / 50

Mas ejemplos. . .

BST optimos
Soluci on recursiva: el sub-problema es aqu encontrar un arbol optimo para las llaves vi , vi +1 , . . . vj y nodos hojas di 1 , di , . . . dj para 1 i N y i 1 j N (el caso j = i 1 corresponde al problema trivial de un solo nodo hoja di 1 ) notemos Tij el costo promedio optimo asociado al sub-arbol con llaves vi , . . . , vj la inicializaci on es trivial: Ti (i 1) = qi 1

, J.B. Hayet Programaci on, Mayo 2008 46 / 50

Mas ejemplos. . .

BST optimos
Soluci on recursiva: para j i elegimos una raiz vr entre las posibles llaves. Dene los dos sub-arboles mencionados arriba. el costo Tij contiene el costo asociado a cada de los sub-arboles; esos arboles, por ser a nadidos a una raiz ven la profundidad de todos sus nodos aumentar de uno entonces
r 1 r 1 j j

Tij = pr + Ti (r 1) +
l =i

pl +
l =i 1

ql + T(r +1)j +
l =r +1

pl +
l =r

ql

, J.B. Hayet Programaci on, Mayo 2008 47 / 50

Mas ejemplos. . .

BST optimos
Soluci on recursiva:
j j

si notamos wij =
l =i

pl +
l =i 1

ql , entonces

Tij = Ti (r 1) + T(r +1)j + wij deducimos la recursi on: Tij = qi 1 si j=i-1 min Ti (r 1) + T(r +1)j + wij si j i

i r j

Dos sub-problemas, elecciones en un rango [i , j ] (muy similar al de las matrices) Queremos la soluci on asociada a T1N
, J.B. Hayet Programaci on, Mayo 2008 48 / 50

Mas ejemplos. . .

BST optimos
Implementaci on: usar un arreglo para los Tij y los rij usar un arreglo para los wij dise nar un esquema para no recalcular los wij cada vez. . .
f o r ( i n t l =1; l <=N ; l ++) // I t e r a t e on sub d i a g o n a l s f o r ( i n t i =1; i <=N l +1; l ++) { j = i + l 1 ;W[ i ] [ j ] = W[ i ] [ j 1]+P [ i ]+Q[ j ] ; T [ i ] [ j ] = s t d : : n u m e r i c l i m i t s < f l o a t > : : max ( ) ; f o r ( i n t r=i ; r <=j ; r++) { i n t v = T [ i , r 1]+T [ r + 1 ] [ j ]+W[ i ] [ j ] ; i f ( v<T [ i ] [ j ] ) {T [ i ] [ j ]= v ; R [ i ] [ j ]= r ; } } }
, J.B. Hayet Programaci on, Mayo 2008 49 / 50

Mas ejemplos. . .

BST optimos
Implementaci on:
i 1 0 2 3 4 5 6

2 j 3

, J.B. Hayet Programaci on, Mayo 2008 50 / 50

Вам также может понравиться