Cómo encontrar factorial de un número en O (logn) complejidad de tiempo

No creo que haya una manera de encontrar el factorial de un número en el tiempo O (log n). (Excepto la aproximación_de Stirling, no precisa).
Sin embargo, en caso de que necesite encontrar factorial de muchos números una y otra vez, no necesita gastar O (n) tiempo para cada uno. Puedes hacerlo todo en O (n).
Usando la programación dinámica !!!

Considere un conjunto de datos de 10 ^ 5 elementos con cada elemento alcanzando un valor máximo de 10 ^ 5.

  • En el peor de los casos, el tiempo máximo que tarda su algoritmo será 10 ^ 5 * 10 ^ 5 (10 ^ 5 para calcular el factorial de cada elemento * 10 ^ 5 elementos)

PERO, si guardamos los resultados calculados previamente en una matriz, podemos reducir esta complejidad de a a O (n).

Lea estas líneas de código cuidadosamente

hecho largo largo [N + 1];
hecho [0] = 1;
para (int i = 1; i <= N; ++ i)
hecho [i] = hecho [i-1] * i;

aquí N = valor del elemento máximo fuera del conjunto de datos

Este código simplifica la búsqueda de factorial.

La matriz de hechos ahora tiene factorial de 10 ^ 5 elementos en solo 10 ^ 5 tiempo.

  • Entonces, incluso en el peor de los casos, el tiempo máximo que tomará este algoritmo será 10 ^ 5 + 10 ^ 5 (10 ^ 5 para calcular previamente el factorial de todos los elementos y O (1) para obtener el factorial)

Cambiando * a +

Espero que haya ayudado !!

No sé si hay un algoritmo con complejidad log (n). Pero ciertamente hay algoritmos que tienen una complejidad menor que ‘n’. Muchos de estos algoritmos se basan en la factorización prima del número. Espero que este enlace ayude

Los algoritmos factoriales más eficientes

También hay algunos algoritmos como el algoritmo de Stirling, pero es un algoritmo de aproximación.

Si desea encontrar el factorial exacto, diría que es imposible porque n! tendrá O (n) dígitos. La impresión / almacenamiento de la salida tomará O (n).

Si está satisfecho con un valor aproximado, puede usar la aproximación de Stirling.

[A2A] No creo que exista un algoritmo que pueda calcular el factorial de un número en el tiempo O (log n). Y si lo hace, aún no se ha descubierto. Incluso las aproximaciones más eficientes como la de Stirling funcionan peor que O (log n).

More Interesting

¿Cuál es el algoritmo más rápido para generar números primos y su complejidad?

¿Cómo se usa la similitud de coseno con el algoritmo K-means?

Cómo saber si un algoritmo es [matemática] O (n) [/ matemática], [matemática] O (2n) [/ matemática] o [matemática] O (n ^ 2) [/ matemática]

Entiendo los conceptos básicos de Java y puedo codificarlo fácilmente, pero no puedo codificar casos complejos. ¿Qué puedo hacer para mejorar mis habilidades de codificación?

Si recibe fondos de miles de millones de dólares y tiene la tarea de crear un motor de búsqueda para competir con Google, ¿cómo sería su motor de búsqueda?

¿Qué algoritmos debo saber para poder resolver la pregunta de Aprendizaje automático / Ciencia de datos de CodeSprint 5 en HackerRank?

Entre C # y Java, ¿cuál es el mejor lenguaje de programación para aprender programación orientada a objetos, estructuras de datos y algoritmos? ¿Por qué?

¿Cuál es el tipo de algoritmo utilizado para resolver el problema de 8 reinas?

¿Deberíamos permitir patentes sobre algoritmos?

Cómo mostrar un problema es NP completo

¿Cómo funciona el algoritmo de sugerencia de seguimiento de Twitter?

15 personas se sentarán en una fila de 15 sillas. ¿Cómo calculo cuántos planes de asientos se pueden hacer, donde dos planes de asientos se consideran iguales si dos planes comparten cuádruples adyacentes? o ¿Cómo puedo crear un algoritmo eficiente para encontrar límites inferiores para 15 o menos personas?

¿Cómo podemos verificar si un punto (digamos el origen) se encuentra en un casco convexo 6-D (o ND) y qué tan lejos está el punto de cualquiera de los lados (facetas) del casco convexo?

¿Cuáles son algunas de las mejores plataformas en línea para practicar la codificación relacionada con algoritmos?

¿Qué lenguaje de programación debo usar para implementar algoritmos que creo?