首页 > 解决方案 > 在不使用数组的情况下改进分箱算法

问题描述

前提:下面介绍的算法B是在蒙特卡洛模拟中停留在分箱过程之后的原始算法。

我有一个算法A,它独立地以有序序列(即,不是当代的)输出同一单个变量的n个一般不同的值;这意味着如果没有存储在任何地方,一个值会被下一个值扫除。这些值需要由算法B处理,其工作方式如下:

1) 对几个连续值取平均值(即第一个与第二个,第三个与第四个,依此类推);
2) 确定新得到的n/2值的标准差并存储起来;
3) 设置n = n/24) 如果n > 1
则返回点 (1) 。

我已经成功地在 C++中实现了算法B ,方法是将n 个初始值存储在具有n个条目的第一个数组中,并将标准偏差存储在第二个可变大小数组中;但是,由于我希望n任意大,因此在我看来,这个解决方案并不是最好的解决方案。
因此我的问题是:有没有其他方法可以在不将n值存储在数组中的情况下实现算法B ?


编辑:下面是算法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).

标签: c++algorithmmontecarlobinning

解决方案


推荐阅读