Div y Conquista: Teorema Maestro Flashcards
¿Qué es “División y Conquista”?
¿Qué se requiere para analizar su complejidad?
Es un conjunto de técnicas algorítmicas:
- Se divide el problema en subproblemas de igual naturaleza y menor tamaño.
- Se los conquista (resuelve) de forma recursiva hasta un caso base.
- Se combinan los resultados en una solución general.
Analizar su complejidad requiere resolver una relación de concurrencia.
Para esto, vamos a desarrollar el cálculo de la complejidad temporal en cada nivel de recursión y luego sumar los tiempos requeridos en cada uno para obtener el tiempo total de ejecución del algoritmo.
¿Cuál es la plantilla básica de división y conquista?
- Dividir el problema en
q
subproblemas de tamaño reducido al original. - Resolver cada subproblema por separado, mediante recursión.
- Combinar el resultado de los subproblemas.
¿Qué es la Relación de Recurrencia?
Es una ecuación que define una secuencia recursiva, donde cada término de la secuencia es definido como una función de términos anteriores.
T_n = F ( T_{n-1}, T_{n-2}, ... )
Existen uno o varios términos base/iniciales desde los cuales se calculan los siguientes.
Ejemplo de Relación de Recurrencia: Mergesort: Explique los elementos de la ecuación, y defina la forma final de la misma.
- Sea T(n) el peor caso de tiempo de ejecución para la resolución del problema de
n
elementos. - Sea
DIV
el proceso de dividir el problema en 2 subproblemas (O(1) <= c; c > 0
). - Sea
UNI
el proceso de unir el resultdo de los 2 subproblemas (O(n) <= cn ; c > 0
).
Entonces:
T(n) <= 2 * T(n/2) + DIV + UNI T(2) <= c
Nos queda:
T(n) ≤ 2*T(n/2) + n ; n>2 T(2) ≤ d ; n=2
Para el proceso de Desenrollar la Recurrencia, con el ejemplo de Mergesort:
- Explique la forma del árbol de recurrencia
- Explique las cantidades de subproblemas por Niveles
Al desarrollar la recurrencia, se arma un arbol.
Se puede ver que en cada nivel, el tamaño de los subproblemas se divide a la mitad, pero se multiplica por 2 la cantidad de subproblemas.
└── n └── n/2 │ ├── n/4 │ └── n/4 └── n/2 ├── n/4 └── n/4
Para el proceso de Desenrollar la Recurrencia, con el ejemplo de Mergesort:
- Explique el cálculo del tiempo de resolución para cada nivel
- Explique la complejidad temporal general
Sean:
-
s
el tamaño de los subproblemas:n/2^i
-
m
la cantidad de subproblemas:2^i
Se puede acotar el tiempo de que se tarda en resolver el nivel i
por:
T = c x ( s x m ) = c x ( n/(2^i) x 2^i ) = cn
Cada nivel requiere un tiempo de cn
.
Hay logn
niveles, ya que se necesita dividir el problema una cantidad log2 n
de veces para reducirlo de n
a 2
. Por lo tanto, el tiempo total requerido es cn logn
, por lo que la complejidad temporal general es:
O(n logn)
Teorema Maestro: explique
Sean:
-
a >= 1
,b >= 1
, constantes. -
f(b)
una función -
T(n) = a T(n/b) + f(n)
una recurrencia conT(0) = cte
, dondea
es la cantidad de llamadas recursivas yb
las partes en las que se divide el problema.
Entonces:
- Primer caso
- Sif(n) = O ( n^( (log_b a) - e ) ) ; e >0
- EntoncesT(n) = Θ ( n^(log_b a))
- Segundo caso
- Sif(n) = Θ ( n^(log_b a))
- EntoncesT(n) = Θ ( n^(log_b a) * logn)
- Tercer caso
- Sif(n) = Ω ( n^((log_b a) + e))
- EntoncesT(n) = Θ ( f(n) )
- Y además,a . f(n/b) <= c . f(n); c < 1, n >>
Resuelva
T(n) = 9T(n/3) + n
T(n) = Θ(n^2)
Resuelva
T(2n/3) + 1
f(n) = Θ(log_b a)
T(n) = O(logn)
Resuelva
T(n) = 3 T(n/4) + n logn
T(n) = Θ ( f(n) ) = Θ (n logn)
Resuelva
T(n) = 2 T(n/2) + n logn
No se puede calcular