Сохраните три числа для набора: количество значений, сумма значений и сумма квадратов значений. Для удобства назовем их k, sn и sn2.
Если, как я думаю, вы подразумеваете, новое значение всегда заменяет старое значение в циклической очереди, то, возможно, число является постоянным. Или, возможно, очередь может быть меньше полной. В любом случае:
Каждый раз, когда вы добавляете значение в очередь, добавляете его к счетчику, добавляете это значение к сумме и добавляете квадрат этого значения к квадратной сумме. То есть, если вы добавите новое значение «n», то k = k + 1, sn = sn + n и sn2 = sn2 + n ^ 2.
Каждый раз, когда вы удаляете значение из очереди, вычитаете его из числа, вычитаете это значение из суммы и вычитаете квадрат этого значения из квадратной суммы. То есть, если вы удалите значение «n», то k = k-1, sn = sn-n и sn2 = sn2-n ^ 2.
Затем вы можете легко пересчитать стандартное отклонение после каждого изменения без необходимости пересчитывать все.
Обратите внимание, это означает, что вы должны иметь возможность "перехватить" значение, прежде чем оно действительно будет удалено.
Примечание: я подозреваю, что так делает мой карманный калькулятор, потому что в нем есть функции для сброса сумм (n) и сумм (n ^ 2), и я могу «удалить» значение, которое я никогда не добавлял, как я могу скажем, добавить 2 и 4 к набору, а затем удалить 3, и это говорит, что все в порядке. Поэтому я не думаю, что он хранит список: он должен просто вести подсчет и суммы.