Indeed, it is possible to control single values ββon average over a constant time, O (1).
. average - , size - , value - , :
double addToAverage(double average, int size, double value)
{
return (size * average + value) / (size + 1);
}
, :
double subtractFromAverage(double average, int size, double value)
{
return (size * average - value) / (size - 1);
}
, . , X /.
double replaceInAverage(double average, int size, double oldValue, double newValue)
{
return (size * average - oldvalue + newValue) / size;
}
:
double addAveragesTogether(double averageA, int sizeA, double averageB, int sizeB)
{
return (sizeA * averageA + sizeB * averageB) / (sizeA + sizeB);
}