Por ahora, el único enfoque factible que tengo.
Defina [math] f (i, j, k) [/ math] como verdadero / falso si los elementos [math] a_i, a_ {i + 1}, …, a_j [/ math] se pueden combinar de alguna manera para formar un valor final [matemática] k [/ matemática]. Necesitamos ver cuál podría ser el valor máximo, donde creo que [math] \ textrm {MAXVAL = max_a * n} [/ math] es un buen límite superior.
Ahora, podemos construir recurrencias de la siguiente manera:
Repetimos [math] l [/ math] suponiendo que finalmente combinamos dos valores generados por subarreglos [math] [i, l] [/ math] y [math] [l + 1, j] [/ math]. Ahora, aquí usamos el hecho de que si ambas submatrices generan un mismo valor final [math] \ frac {k} {2} [/ math] (suponiendo que [math] k [/ math] es divisible por 2), podemos generar [math] k [/ math], o de lo contrario, una de las submatrices debería generar el valor [math] k [/ math] y otra submatriz debería generar un valor de al menos [math] k [/ math].
- Al tomarlo en un curso este verano, mi tesis sobre un tema sobre teoría de números, ¿dónde debería comenzar a buscar?
- Cómo demostrar que para cada entero positivo n, [matemáticas] 2 ^ n \ not \ equiv 1 \ pmod {n} [/ matemáticas]
- ¿Cuáles son las ventajas y desventajas de estudiar la teoría de números principalmente a través de la perspectiva del álgebra y la teoría de grupos?
- ¿Cuál es la media aritmética del cuadrado de los primeros 2m números naturales?
- Si tuviera 2 minutos con Sir Andrew Wiles, ¿qué le preguntaría?
Entonces, el pseudocódigo para las recurrencias se ve algo así (espero que pueda escribir casos base usted mismo):
f (i, j, k)
// punto de quiebre es l
para l = i a j-1
// mantener el valor máximo que ambos pueden generar
max1 = max2 = 0
para x = 1 a MAXVAL:
si f (i, l, x)
max1 = max (max1, x)
si f (l + 1, j, x)
max2 = max (max2, x)
// ambos pueden generar k / 2
si k% 2 == 0 yf (i, l, k / 2) yf (l + 1, j, k / 2)
volver 1
si f (i, l, k) y max2> k
volver 1
si f (l + 1, j, k) y max1> k
volver 1
volver 0
Ahora, podemos iterar sobre todos los valores posibles [matemática] k [/ matemática] para ver cuál [matemática] f (0, N-1, k) [/ matemática] da el máximo. Entonces, la complejidad es [matemática] O (n ^ 5 * \ textrm {max_a} ^ 2) [/ matemática].
cc Arjun Arul para sugerir algo mejor, como siempre. 🙂
Editar: vea su comentario sobre cómo puede reducir la complejidad por un factor de [math] \ textrm {max_a} [/ math].