Предпосылка: Алгоритм B , представленный ниже, является необработанным алгоритмом, который стоит за процедурой биннинга в симуляции Монте-Карло.
У меня есть алгоритм A , который выводитсамостоятельно и в упорядоченной последовательности (т.е. не современной) n общие значения для одной и той же переменной;это означает, что, если нигде не сохранено, одно значение будет сметено следующим.Эти значения должны быть обработаны алгоритмом B , который работает следующим образом:
1) Среднее значение по парам смежных значений (т. Е. Первое со вторым, третье счетвертый и т. д.);
2) Определите стандартное отклонение вновь полученных значений n / 2 и сохраните его;
3) Установите n = n / 2;
4) Вернитесь к точке (1), если n> 1 .
Мне удалось реализовать алгоритм B в c ++, сохранив начальные значения n в первом массиве с n записями и стандартом.отклонения во втором массиве переменного размера;однако, поскольку я хочу, чтобы n был произвольно большим, мне кажется, что это решение не является лучшим.
Таким образом, мой вопрос: есть ли другой способ, которым я могу реализовать алгоритм B без сохранения значений n в массиве?
Редактировать: Здесь приведен пример того, как алгоритм B работает с массивом размера n.
int n; //Number of values.
double * first_array = new double[n]; //Array in which every single value given by Algorithm A is stored.
do
{
for (int x = 0; x < n/2; x++) //As in point (1).
first_array[x] = (first_array[2*x] + first_array[2*x + 1])/2.0;
... //Here I put the values in first_array in an appropriate function to obtain the standard deviation of this single set of values and store it away as in (2).
n = n/2; //As in point (3).
} while (n > 1); //As in point (4).