Deje que [math] a_1 \ leq a_2 \ leq \ ldots \ leq a_n [/ math] sean los elementos en la matriz.
Tenga en cuenta que dados dos elementos [math] a_i \ leq a_j [/ math] si tenemos
[matemática] a_i + a_j <x [/ matemática] podemos aumentar la suma tomando [matemática] a_ {i + 1} [/ matemática] en lugar de [matemática] a_i [/ matemática]
[math] a_i + a_j> x [/ math] podemos disminuir la suma tomando [math] a_ {j-1} [/ math] en lugar de [math] a_j [/ math]
- El coeficiente binomial [matemáticas] {N \ elegir k} [/ matemáticas] se puede definir de forma recursiva como [matemáticas] {N \ elegir 0} = 1 [/ matemáticas], [matemáticas] {N \ elegir N} = 1 [/ matemáticas] y para 0 <k <N, [matemáticas] {N \ elegir k} = {N-1 \ elegir k} + {N-1 \ elegir k-1} [/ matemática]. ¿Cómo escribo un método Java eficiente para calcular el coeficiente binomial sin usar recursividad?
- ¿Hay alguna manera de resolver los problemas del problema SEQ sin el uso de la exponenciación de matrices?
- Cómo entender las anotaciones asintóticas
- ¿Cuál será el valor máximo de [math] \ theta [/ math] hasta que la aproximación [math] \ sin {\ theta} [/ math] sea aproximadamente igual a [math] \ theta [/ math] que se mantenga dentro del 10% ¿error?
- ¿Por qué la suma de enteros hasta cualquier potencia de 2 tiene una representación binaria tan simple?
Además, si
[matemática] a_i + a_j <x [/ matemática] para todos [matemática] k \ leq i [/ matemática] tenemos que [matemática] a_k + a_j <x [/ matemática]
[matemática] a_i + a_j> x [/ matemática] para todos [matemática] k \ geq j [/ matemática] tenemos que [matemática] a_i + a_k> x [/ matemática]
De esta manera, podemos evitar mirar cada par porque podemos identificar pares “malos” mirando solo uno de ellos.
Con eso en mente, el siguiente pseudocódigo resuelve el problema
i = 0, j = n-1
mientras que (i <= j) {
if (a [i] + a [j] == x) devuelve verdadero // ¡Solución encontrada!
if (a [i] + a [j] <x) i = i + 1 // Incremente la suma
if (a [i] + a [j]> x) j = j-1 // Disminuye la suma
}
return false // No se encontró solución
La complejidad temporal de este algoritmo es [matemática] \ theta (n) [/ matemática] porque en cada iteración aumentamos [matemática] i [/ matemática] en [matemática] 1 [/ matemática] o disminuimos [matemática] j [ / math] por [math] 1 [/ math] y se detienen cuando se encuentran en el medio (o encontramos una solución). De esta forma, el aspecto se ejecutará la mayoría de las veces [math] n-1 [/ math] (y el costo de cada iteración es [math] \ theta (1) [/ math])