Улучшение алгоритма биннинга без использования массивов - PullRequest
0 голосов
/ 25 апреля 2019

Предпосылка: Алгоритм 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).
...