Estoy buscando una idea, concepto o estructura de datos probada que sea muy eficiente al acceder a una colección que mantiene valores acumulativos.¿Cuál es una buena estructura de datos para mantener los valores acumulados?
Ejemplo puede arrojar más luz sobre mi necesidad:
tengo una lista de valores (2,3,5). Esta lista al observar los valores acumulativos sería (2,5,10).
Ahora agregaré 1 al comienzo de la lista y obtendré (1,2,3,5) y en términos acumulados (1,3,6,11).
Solo necesito mirar los valores acumulativos, no estoy interesado en absoluto en el 1,2,3,5. Tengo que ser capaz de insertar rápidamente en la posición, quitar una posición y todo esto debería actualizar rápidamente la formación acumulativa (idealmente sin iteración a través de toda la matriz y volver a calcular los valores.
Cualquier idea o sugerencias?
@ Kristo (demasiado largo para poner en el comentario): Para aclarar por qué los números negativos harían que el valor de la suma total no tenga sentido, siga este ejemplo.
Inserte 1 seguido de -1. Suma es 1 que 0. (1, - 1) // (1,0) Insertar 3 seguido de insertar -3. Suma es 3 luego 0. (1,3, -1, -3) // (1,4,3,0) Insertar 2 seguido de insertar -2. Suma es 2 luego 0. (1,3,2, -1, -2, -3) // (1,4,6,5,3,0)
Si mi "número mágico" fuera 4 la suma total no me diría si la he excedido.
PD: La razón principal de esto es poder decir si supere cierto valor y en qué parte de la cadena.
¿Usted estaría apareciendo elementos al azar de la lista? ¿En qué dirección lo atravesarás? –
Insertar o quitar elementos del centro no debería necesitar cálculos para toda la matriz. El cálculo será requerido desde el punto de inserción/eliminación. – shahkalpesh
También es importante su carga de trabajo esperada. ¿Está optimizando para que las lecturas sean rápidas, las inserciones sean rápidas o los tiempos sean iguales? – Matt