Академический Документы
Профессиональный Документы
Культура Документы
1. Planteamiento general
Idea general
Descomponer un problema en subproblemas (ms pequeos) Resolver cada subproblema Combinar las soluciones
1. Planteamiento general
Funcin DV(X: Datos del problema) si pequeo(X) entonces S = sencillo(X) sino (X1, ..., Xl) = descomponer(X) para i = 1 hasta l hacer Si = DV(Xi) S = combinar(S1, ..., Sl) devolver S
1. Planteamiento general
Asumiendo la existencia de
pequeo(X) - funcin booleana que determina si es prctico aplicar sencillo(X) sencillo(X) - algoritmo prctico para el problema si su tamao es suficientemente pequeo descomponer(X) - funcin que descompone P en l subproblemas P1, ..., Pl con entradas X1, ..., Xl combinar(S1, ..., Sl) - funcin que combina l soluciones Si para Pi, en una nica para P
1. Planteamiento general
Efectividad del enfoque
Debe elegirse correctamente el umbral a partir del cual aplicar sencillo(X) Las funciones de descomposicin y combinacin deben ser eficientes Los subproblemas deben ser aproximadamente del mismo tamao
1. Planteamiento general
Complejidad
pequeo(X) tarda un tiempo asimilable a otras funciones del esquema sencillo(X) tarda f(n) descomponer(X) y combinar(S1, ... Sl) tardan entre los dos g(n) el tamao de cada subproblema es de n/b
1. Planteamiento general
Complejidad
t(n) = f(n) si sencillo(X) t(n) = l.t(n/b) + g(n) en otro caso y si g(n) (nk) t(n) (nk) t(n) (nk.log n) t(n) (nlog l) si l < bk si l = bk si l > bk
1. Planteamiento general
Observacin
Si l = nmero de subproblemas Y n/b = tamao de los subproblemas No necesariamente l = b !!!
1. Planteamiento general
Ejemplo (Multiplicacin de grandes enteros)
Multiplicar dos nmeros a y b enteros muy grandes Algoritmo clsico (n2) con n = nmero de cifras del mayor de los nmeros
1. Planteamiento general
Ejemplo (Multiplicacin de grandes enteros)
Enfoque DyV1 Dividir cada nmero en n/2 cifras Ejemplo a = 981, b = 1234
w = 09, x = 81 y = 12, z = 34 a . b = (102w + x)(102y + z) = 104wy + 102(wz + xy) + xz = 1080000 + 127800 + 2754 = 1210554
1. Planteamiento general
Ejemplo (Multiplicacin de grandes enteros)
Complejidad DyV1 t(n) = 1 si n = 1 t(n) = 4.t(n/2) + n en otro caso => t(n) (n2)
1. Planteamiento general
Ejemplo (Multiplicacin de grandes enteros)
Enfoque DyV2 No calcular (wz + xy) = (w + x)(y + z) - wy - xz p = wy, q = xz, r = (w + x)(y + z)
a . b = 104p + 102(r - p - q) + q
1. Planteamiento general
Ejemplo (Multiplicacin de grandes enteros)
Complejidad DyV2 Usando el algoritmo clsico para p, q, r, ahorramos 25% Adems t(n) = 1 si n = 1 t(n) = 3.t(n/2) + n en otro caso => t(n) (nlog3) = (n1.585)
La eleccin del umbral de aplicacin de sencillo(X) (es decir, pequeo(X)) es fundamental Si no se elige adecuadamente, el enfoque D y V es muy ineficiente
Si n0 = 64
DyV2 tarda 6 segundos para 5000 cifras
Observacin
Si x no est en T, se pide dnde debera estar
10
Funcin bbinaria(T: matriz [1..n] de entero, x: entero) : entero si ((n = 0) o (x > T[n])) entonces devolver n+1 sino devolver brecursiva(T,1,n,x)
11
12
Ganamos eficiencia en todos los dems casos La versin iterativa de bbinaria es equivalente en tiempo
13
Dos enfoques
Descomposicin simple, combinacin compleja Descomposicin compleja, combinacin simple
14
15
16
17
Procedimiento ordrapida(T: matriz [1..n] de entero, i,j: entero) si (i < j) entonces pivote(T,i,j,l) ordrapida(T,i,l-1) ordrapida(T,l+1,j)
18
19
20
Situacin general
Los elementos se repiten => modificar pivote(T,i,j,l) para obtener pivote(T,i,j,k,l) de modo que entre k y l estn los elementos repetidos
21
Complejidad
Usando la ordenacin rpida
O(n2) en el caso peor O(n.log n) en el caso mejor y en media
22
23
En media
Se hace un nmero logartmico de llamadas a pivote(), cada una con coste lineal t(n) (n.log n)
Solucin elemental
La que viene dada por la definicin clsica
24
25
R11 = A11xB11 + A12xB21 R12 = A11xB12 + A12xB22 R21 = A21xB11 + A22xB21 R22 = A21xB12 + A22xB22
26
=>
27