La evaluación de [matemáticas] F (i, j) [/ matemáticas] explorará todos los puntos desde [matemáticas] F (i, i) [/ matemáticas] a [matemáticas] F (i, j-1) [/ matemáticas] y desde [matemática] F (i + 1, j) [/ matemática] a [matemática] F (j, j) [/ matemática].
Al observar la simetría, encontramos que el número de veces que evalúa [math] F [/ math] depende solo de [math] ji [/ math].
Sea [math] m = ji [/ math], y [math] g (m) [/ math] sea el número de veces que llama a [math] F [/ math] mientras evalúa [math] F (i, j) [ /matemáticas] . Entonces
- En un gráfico no dirigido, ¿cuál es el grado de un vértice con un bucle automático?
- ¿Cuáles son algunos ejemplos bien conocidos donde se usa la programación dinámica?
- ¿Por qué la recursión me causa tantos problemas?
- ¿Qué tipo de algoritmo de procesamiento del lenguaje natural se usaría para replicar los resultados de esta charla TED?
- ¿Cuál es la forma más eficiente de ordenar un millón de enteros de 32 bits?
[matemáticas] g (0) = 1 \\ g (m) = 1 + 2 \ suma \ límites_ {k = 0} ^ {m-1} g (k) [/ matemáticas]
Deje que [matemáticas] G (x) = \ sum \ limits_ {m = 0} ^ {\ infty} g (m) x ^ m [/ matemáticas]
Entonces
[matemáticas] G (x) = g (0) + g (1) x + g (2) x ^ 2 + g (3) x ^ 3 + \ cdots \\ = 1 + 2 \ left (1 + g ( 0) \ derecha) x + 2 \ izquierda (1 + g (0) + g (1) \ derecha) x ^ 2 + 2 \ izquierda (1 + g (0) + g (1) + g (2) \ derecha) x ^ 3 + \ cdots \\ = 1 + 2 \ left (x + x ^ 2 + x ^ 3 + \ cdots \ right) + 2G (x) \ left (x + x ^ 2 + x ^ 3 + \ cdots \ right) \\ = 1 + \ frac {2x} {1-x} + \ frac {2x} {1-x} G (x) \\ = \ frac {1} {1-3x} + \ frac {x} {1-3x} \\ = \ left (1 + 3x + 3 ^ 2 x ^ 2 + \ cdots \ right) + x \ left (1 + 3x + 3 ^ 2 x ^ 2 + \ cdots \ derecha) \\ = 1 + \ sum \ limits_ {m = 1} ^ {\ infty} \ left (3 ^ m + 3 ^ {m-1} \ right) x ^ m [/ math]
Así
[matemáticas] g (m) = 3 ^ m + 3 ^ {m-1} [/ matemáticas]
Del mismo modo, podemos calcular el número de comparaciones [matemáticas] h (m) [/ matemáticas] donde
[matemáticas] h (0) = 0 \\ h (m) = m-1 + 2 \ sum \ limites_ {k = 0} ^ {m-1} h (k) [/ matemáticas]
Entonces
[matemáticas] H (x) = h (0) + h (1) x + h (2) x ^ 2 + h (3) x ^ 3 + \ cdots \\ = 2 \ left (0 + h (0) \ right) x + 2 \ left (1 + h (0) + h (1) \ right) x ^ 2 + 2 \ left (2 + h (0) + h (1) + h (2) \ right) * x ^ 3 + \ cdots \\ = 2 \ left (x ^ 2 + 2x ^ 3 + 3x ^ 4 + \ cdots \ right) + 2H (x) \ left (x + x ^ 2 + x ^ 3 + \ cdots \ right) \\ = \ frac {2x ^ 2} {(1-x) ^ 2} + \ frac {2x} {1-x} H (x) \\ = \ frac {2x ^ 2} {( 1-x) (1-3x)} \\ = x ^ 2 \ left (\ frac {3} {1-3x} – \ frac {1} {1-x} \ right) \\ = 3x ^ 2 \ left (1 + 3x + 3 ^ 2 x ^ 2 + \ cdots \ right) – x ^ 2 \ left (1 + x + x ^ 2 + \ cdots \ right) \\ = \ sum \ limits_ {m = 2} ^ {\ infty} \ left (3 ^ {m-1} – 1 \ right) x ^ m [/ math]
[matemáticas] h (m) = 3 ^ {m-1} – 1 [/ matemáticas]
Eso es realmente exponencial, por lo que te recomiendo que uses DP en su lugar. Reducirá el número a polinomio.