Enviado por Llyn en Algoritmos, Programacion
Potencias y series de potencias a un gran entero
Como habré hecho notar en la solución para el problema anterior, la solución conlleva elevar una matriz a la y tomando en cuenta que para multiplicar un par de matrices se requeriría
multiplicaciones escalares esto daría un total de
operaciones, lo cual podemos disminuir a
. Veamos cómo se hace.
También se aplica a potencia de escalares, por lo que vamos a tomar como ejemplo el resultado . Esto es igual a
, entonces si calculamos
y lo multiplicamos por si mismo nos da
por lo que reducimos de unas 617 operaciones a una sola. Y de la misma forma podemos obtener
ya que el exponente no es par, seguimos así hasta encontrar el caso base con el exponente cero, donde
. Se podría aplicar el algoritmo recursivo siguiente,
template <typename _Ty>
_Ty power(const _Ty & x, unsigned int p) {
if (p == 0) return Identity<_Ty>(); // 1 para _Ty = int.
// notar que C/C++ omite los decimales en una división.
_Ty y = power(x, p / 2);
if (p % 2 == 1)
return y * y * x;
else
return y * y;
}
Lo cual disminuye las 1233 multiplicaciones en un número alrededor de , particularmente 16, multiplicaciones.
Una idea similar se puede usar para calcular series de este tipo:
Otro ejemplo con relativamente pequeño para que se aprecie mejor, calcular
. Tenemos que,
Lo cual es igual a,
Y seguimos,
Y llegamos al caso base con . En algoritmo:
template <typename _Ty>
_Ty serie(const _Ty & x, unsigned int p) {
if (p == 0) return Identity<_Ty>();
_Ty t = power(x, (p + 1) / 2);
_Ty y = serie(x, (p - 1) / 2) * (Identity<_Ty>() + t);
if (p % 2 == 1)
return y;
else
return y + t * t;
}
En base al algoritmo anterior, al calcular se producen 4 sumas y 14 multiplicaciones. Con
tenemos 15 sumas y 98 multiplicaciones.
Posts Relacionados
- Iterando en el dominio de una función Bien, volvemos a la programación, bueno casi. Tenemos este problema,...
- ¿Cuántas formas? Regreso con el arameo, escribí un problema hace unos días,...
- Solución a ¿Cuántas formas? Primero, no importan que caracteres son, con o da la...


