我在C编码MCMC算法,我有一点问题。该算法的思想是推断群体中的群体数量。那么让我们说我们从k组开始。其中k的第一个值由用户给出或随机选择。现在,在算法的每个步骤中,k可以减1,增加1或保持不变。我为每个组都有一些变量;
double *mu;
double *lambda;
double **A
mu和lambda确实是k个元素的数组,A是kxN的二维数组。 N也在每次迭代时发生变化。我有一些数据y1,y2,...,yn所以在每次迭代我做一些处理,为参数提出新值并决定是否移动k。
到目前为止,我已经绑定使用malloc和realloc来处理我的参数维度的所有这些变化,但是我必须迭代这个算法让我们说100,000次,所以在某些时候它会崩溃。如果我在第三次迭代中以k = 10开始!
所以有两个问题:
答案 0 :(得分:4)
我会考虑不在每次迭代时更改存储空间。 realloc
带来了相当大的开销(在最坏的情况下,它必须每次都复制整个数组)。
您可以在启动时简单地分配最大尺寸,然后只使用更少的尺寸吗?或者至少,只有{em}增加存储要求realloc
才能增加容量(从而模仿std::vector
的运作方式)。
[顺便说一下,我不知道为什么你的应用程序崩溃了,因为你没有给我们任何细节(例如你得到的错误信息,或你通过调试找到的。但我猜你某处有错误!]