posteriormente mantener una caché LRU basado en la entrada más reciente, porque la gente es más probable que se repita búsquedas
Eso podría ser una opción de diseño razonable, pero en la entrevista que habíamos frase que más lo una pregunta para el entrevistador: "¿sería razonable suponer que las llamadas serán más parecidas a las realizadas con valores recientes, o hay alguna otra agrupación esperada (se solicitarán grandes cantidades más a menudo que pequeñas o viceversa)?"
Por ejemplo, puede tener sentido almacenar en memoria caché LRU, pero nunca descartar los valores de 10, 20, 30, 40, etc. De esta forma, el peor caso para calcular un factorial una vez que el caché se llena de esos valores es tiene que realizar 10 multiplicaciones.
Otra consideración que podría hacer es que las computadoras pueden tratar muy fácilmente con ciertos factoriales:
- 12! es el más grande que puede contenerse en una palabra de 32 bits.
- 20! es el más grande que se puede contener en una palabra de 64 bits.
- 34! es el más grande que puede contenerse en una palabra de 128 bits.
Dado que las máquinas de hoy en día pueden manejar fácilmente la aritmética de 64 bits (tal vez incluso la aritmética de 128 bits), ¡también puede tener sentido no almacenar nunca en caché un valor de 20! o menos una vez que la memoria caché se llena con valores mayores que eso.
El peor caso para la búsqueda en una pérdida de caché dependerá de cómo se almacena la memoria caché. ¿Es una matriz ordenada por el argumento de la función? (la búsqueda es O (log n)) ¿Es una matriz en orden LRU?(buscar en la falta de caché es O (n)). Creo que también querría dejar en claro que desea que una búsqueda en caché siempre devuelva el valor más alto en la memoria caché que sea menor que lo que está buscando; ese valor de caché representa un trabajo que no tiene que hacer para este cálculo factorial particular.
¿Se proporciona suficiente información para determinar una política de caché? LRU sería una apuesta segura, pero dependería del uso. Es decir, ¿qué sucede si el uso es enumerar de 1 a 100 todas las veces? En ese caso, ¿podría almacenar en caché los diez más caros para calcular? – Smudge202