Está en la página 1de 10

INSTITUTO TECNOLGICO DE COSTA RICA

INVESTIGACIN DE OPERACIONES

Apuntes del mircoles 21 de agosto de 2013

Prof. Dr. Francisco Jos Torres Rojas

Elaborado por:

Adonis Mora A. 201054068

rbol de bsqueda binaria ptimo y programacin dinmica Un rbol posee n llaves, las cuales corresponden a cada nodo del rbol. o KEY1 < KEY2 < < KEYn Y cada KEY tiene asociado una probabilidad de consulta o P1, P2, , Pn Se utiliza una tabla A para recordar los resultados ptimos Considerando la KEYi hasta KEYj o KEYi < < KEYk < < KEYj o Pi < < Pk < < Pj o Todas las KEY estn en un mismo subrbol o Supongamos que la raz del subrbol es KEYk (ikj) KEY1 , KEY2 , , [ KEYi , , KEYk , , KEYj ], , KEYn-1 , KEYn o Entonces el subrbol posee j-i+1 races posibles. o La idea es minimizar los saltos promedio (La esperanza promedio de bsqueda).

RECORDAR ORDENAR LAS LLAVES, NO NECESARIAMENTE ESTAN ORDENADAS!!!

rbol optimo con raz KEYk

KEYk
+1 +1

KEYi, , KEYk-1

KEYk+1 , , KEYj

Cada subrbol (izquierdo y derecho) deben ser ptimos El costo optimo para el subrbol o Izquierdo est ubicado en A[ i ] [ k-1 ]

A[ i ] [ k-1 ] = Ci*Pi + Ci+1*Pi+1 + + Ck-1*Pk-1 o Derecho est ubicado en A[ k+1 ] [ j ] A[ k+1 ] [ j ] = Ck+1*Pk+1 + + Cj-1*Pj-1 + Cj*Pj Y para el costo total de KEYi hasta KEYj es: (1+Ci)*Pi + (1+Ci+1)*Pi+1 + + (1+Ck-1)*Pk-1 + Pk + (1+Ck+1)*Pk+1 + + (1+Cj-1)*Pj-1 + (1+Cj)*Pj

Simplificando un poco nos da como resultado Ci*Pi + Ci+1*Pi+1 + + Ck-1*Pk-1 + Ck+1*Pk+1 + + Cj-1*Pj-1 + Cj*Pj + Pi + + Pk-1 + Pk + Pk+1 + + Pj
Sumatoria de las probabilidades de i hasta j

Cual k se elige? o se busca el que minimice el costo de A[ i ] [ k-1 ] + A[ i ] [ j ] = min A[ k+1 ] [ j ] + Pi + + Pk-1 + Pk + Pk+1 + + Pj

Caso trivial Un rbol de un slo nodo KEYi hasta KEYi Se guarda en A [ i ] [ i ]


Truco de programacin, llenar: A[ i ] [ i-1 ]=0 A[ j+1 ] [ j ]=0

Ejemplo 1 Existen 4 llaves: KEY1 = Harrison KEY2 = Lennon KEY3 = McCartney KEY4 = Starr P1 = 0.18 P2 = 0.32 P3 = 0.39 P4 = 0.11

Cul es el ABB ptimo? La tabla A se construye de la siguiente forma: o Dado n llaves, la tabla A es de n+1 x n+1 o En este caso 4 llaves, es una tabla A de 5x5 o Las columnas comienzan en 0 o Las filas comienzan en 1 Sabemos: o A[ i ] [ i-1 ]=0 o A[ j+1 ] [ j ]=0 o A[ i ] [ j ] = Pi

La tabla seria: 0 0 1 0.18 0 2 0.68 0.32 0 3 1.46 1.03 0.39 0 4 1.79 1.25 0.61 0.11 0

1 2 3 4 5 A[ 1 ][ 2 ]?

Con la ecuacin se escoge K= 1,2 rbol desde KEY1 hasta KEY2 Pij es la constante de la sumatoria de las probabilidades de i hasta j A[ i ] [ j ] = min ( A[ i ][ k-1 ] + A[ k+1 ][ j ] + Pij ) P12 = 0.18 + 0.32 = 0.5 K=1 o A[1][0] + A[2][2] + 0.5 = 0.82 K=2 o A[1][1] + A[3][2] + 0.5 = 0.68 Se elige el menor, A[1][2] = 0.68

A[ 2 ][ 3 ]? A[1][3] Con la ecuacin se escoge K= 1,2,3 P123 = 0.18 + 0.32 + 0.39 = 0.89 K=1 o A[1][0] + A[2][3] + 0.89= 1.92 K=2 o A[1][1] + A[3][3] + 0.89= 1.46 K=3 o A[1][2] + A[4][3] + 0.89= 1.57 Se elige el menor, A[1][3] = 1.46 Con la ecuacin se escoge K= 2,3 P23 = 0.32 + 0.39 = 0.71 K=2 o A[2][1] + A[3][3] + 0.71= 1.10 K=3 o A[2][2] + A[4][3] + 0.71= 1.03 Se elige el menor, A[2][3] = 1.03

Forma rpida de hacerlo Para el caso A[ 1 ][ 2 ] 0 01 1 0.182 0 2 0.68 0.321 02 3 4

1 2 3 4 5

0.39 0

0.11 0

Se empieza en la columna i-1 y en la fila i+1 Hasta la columna j-1 y fila j+1 Segn la imagen anterior se suman los 1 ms la P ij o En este caso 0+0.32+0.5 = 0.82 Y se compara con la suma de los 2 ms la Pij o 0.18+0+0.5 = 0.68 Asi sucesivamente, y se toma el menor de ellos as obtenemos el valor de A[ i ] [ j ].

Una vez llenado la tabla A R 1 2 3 4 5 A[ 1 ] [ n ] = 1.79 significa que existe al menos un rbol que cuenta 1.79 El costo promedio es 1.79 Pero como se hace el rbol? Se crea una tabla auxiliar R, de las mismas dimensiones que A Se registra el K ganador cuando se llenaba la tabla A La tabla R sera: 0 0 1 1 0 2 2 2 0 3 2 3 3 0 4 2 3 3 4 0

El rbol quedara:

KEY2
R[1][1] R[3][4]

Rango de las llaves que falten. Ej. si faltaran las llaves 12 al 15 se buscara R[12][15]

KEY1

KEY3
R[4][4]

KEY4

Algoritmo para ABB ptimo Complejidad espacial o Cuadrtica Complejidad Temporal o Cbica Fue creado por Gilbert & Moore (1956) Actualmente hay un algoritmo con complejidad temporal (n2) creado por Yao (1982)

Ejemplo 2 Carpenter = 0.05 Cash = 0.07 Cobain = 0.01 Harrison = 0.35 Hendrix = 0.09 Joplin = 0.23 Lennon = 0.15 Morrison = 0.04 Presley = 0.01

Tabla A: A 1 2 3 4 5 6 7 8 9 10 0 0 1 0.05 0 2 0.17 0.07 0 3 0.19 0.09 0.01 0 4 0.67 0.52 0.37 0.35 0 5 0.85 0.70 0.55 0.53 0.09 0 6 1.40 1.25 1.10 1.08 0.41 0.23 0 7 1.85 1.70 1.53 1.50 0.71 0.53 0.15 0 8 2.01 1.86 1.65 1.62 0.83 0.65 0.23 0.04 0 9 2.08 1.91 1.69 1.66 0.87 0.69 0.26 0.06 0.01 0

Tabla R: R 1 2 3 4 5 6 7 8 9 10 0 0 1 1 0 2 2 2 0 3 2 2 3 0 4 4 4 4 4 0 5 4 4 4 4 5 0 6 4 4 4 4 6 6 0 7 4 4 6 6 6 6 7 0 8 4 4 6 6 6 6 7 8 0 9 4 4 6 6 6 6 7 8 9 0

rbol ptimo:
Harrison

Joplin Cash

Carpenter

Cobain

Hendrix

Lennon

Morrison

Presley

Finales de la NBA (apuestas) Potencialmente gana el mejor de 7 (ganar 4 partidas) No hay empates Se enfrentas los equipos A y B Caso general: o 2K-1 juegos, el primero en ganar K juegos es el campen.

Probabilidades Supongamos que el equipo A tiene una probabilidad P de ganar cada partido ( constante e independiente) El equipo B tiene una probabilidad Q= 1- P de ganar Cul es la probabilidad de que A sea campen (ganar 4 partidos antes que B)?

Juegos Restantes Se puede saber para cada equipo los juegos que faltan para ser campen. (1,3) significa que al equipo A le falta 1 juego y al equipo B le faltan 3 juegos para ser campen. El estado inicial es (4,4), a cada equipo le faltan 4 juegos para ser campen. El 0 significa que ese equipo ya es campen. Pregunta general, si el estado es ( i, j ), cul es la probabilidad de que el equipo A sea campen?

( i, j ) P Q

( i-1, j )

( i, j-1 )

Si A gana se llega al estado (i-1, j), con probabilidad P Si B gana se llega al estado (i, j-1), con probabilidad Q

Definimos una funcin F(i,j) que regresa la probabilidad que A sea campen a partir del estado (i,j). Entonces: o F(i,j) = P*F(i-1,j) + Q*F(i, j-1) Casos triviales o F(0, j) = 1.0 o F(i, 0) = 0.0

Enfoque Divide y Vencers en cdigo C:


Long double F (int i, int j) { If (i == 0) Return 1.0; Else If (j == 0) Return 0.0; Else Return (p*F(i-1, j) + q*F(I, j-1)); }

Complejidad temporal: o Combinatoria sobre i+j (28 = 256)

También podría gustarte