¿Cuál es la mejor manera de encontrar la media de una secuencia en cualquier momento?

Depende de lo que esté tratando de optimizar, y si quiere decir ‘poder averiguar el promedio hasta AHORA’ o si desea poder averiguar retrospectivamente cuál era el promedio en un momento dado.

Suponiendo que solo desea almacenar el “promedio móvil”, desea que sea correcto, pero desea minimizar el espacio de almacenamiento, vale la pena hacer lo siguiente:

  • Almacene el promedio hasta ahora y la cantidad de artículos hasta ahora
  • Cuando llega el siguiente elemento, incrementa el número de elementos hasta el momento y ajusta el promedio en (la diferencia entre el nuevo término y el promedio anterior) / (número de términos hasta el momento).

La desventaja, por supuesto, es que efectivamente está desechando el historial, por lo que lo ÚNICO que puede hacer con la transmisión es calcular el promedio actual.

Si desea poder llegar rápidamente a cualquier promedio pasado, y el espacio de datos es ‘efectivamente ilimitado’, use el mismo algoritmo, pero almacene un triplete de índice-valor-promedio móvil hasta ese punto … entonces puede obtener rápidamente un promedio pasado por búsqueda … sin necesidad de recuperar potencialmente miles de millones de valores pasados ​​y sumarlos en ese punto.

Si los valores son gruesos y rápidos, el espacio de almacenamiento es ‘libre’ y solo desea hacer el promedio de vez en cuando, solo almacene el flujo de valor y calcule en el punto de necesidad. (Gracias a Daniel McLaury por señalar que valdría la pena almacenar en memoria caché los cálculos, en ese momento es posible que desee almacenar en caché un índice, el número de valores para señalar y el promedio de ejecución, para que pueda usarlo en el cálculo de promedios futuros. )

Puede usar árboles balanceados aumentados, árboles indexados binarios o árboles de rango para resolver este tipo de problemas de consulta de rango.

More Interesting

¿Dónde puedo encontrar preguntas sobre estructuras de datos sabias para las ubicaciones?

¿Cuáles son los usos de un puntero en una estructura de datos?

Como principiante, ¿debo invertir mi tiempo en escribir mi propio algoritmo de aprendizaje automático desde cero?

¿Qué libros debería leer alguien para comprender completamente una introducción a los algoritmos? ¿Qué lo hará realmente entenderlo?

¿Por qué utilizan la factorización principal para el cifrado en lugar de un algoritmo que hemos demostrado que es difícil de resolver?

¿Cuándo podrán los algoritmos de detección de imágenes filtrar imágenes ofensivas de manera confiable?

Cómo encontrar el elemento más grande y el segundo más grande entre los elementos de la matriz sin la técnica de selección de selección

¿Cuál es el significado de la complejidad en el algoritmo?

¿Debería un ingeniero que no sea CS aprender programación, algoritmos y estructuras de datos?

¿Cuál es el programa C para encontrar la subsecuencia repetida más larga en un texto dado?

¿Debo comenzar a aprender programación de computadoras con CS50 o con un libro de estructuras de datos y algoritmos?

¿Cuándo debo comenzar a aprender algoritmos de C ++?

¿Los mismos algoritmos dan resultados diferentes en diferentes paquetes / idiomas?

¿Qué es el algoritmo de optimización de memoria?

¿Por qué no es posible encontrar la ruta más corta desde el vértice de origen a cualquier otro vértice si el gráfico contiene un ciclo?