随机高斯函数的时间复杂度

时间:2014-04-22 05:56:57

标签: c++

我在C ++中创建了一个Cross Entropy Minimization方法的实现,并参考了http://www.cleveralgorithms.com/nature-inspired/probabilistic/cross_entropy.html给出的Ruby代码

我无法理解random_gaussian函数与正态分布的关系以及它究竟在做什么。此外,我无法找出此功能的复杂性。请帮我解决这两件事。

    double random_gaussian(double mean , double stdev)
    {
          double u1,u2,w;
          do {
            u1 = 2*((double)rand()/RAND_MAX) - 1;
            u2 = 2*((double)rand()/RAND_MAX) - 1;
            w = u1*u1 + u2 * u2;
          } while( w >= 1 );

          w = sqrt(( -2.0 * log(w ))/w);
          return mean + ( u2* w ) * stdev;
    }

这是C ++代码http://pastebin.com/Q4c73Kdi。该程序用于解决AX = B,并且工作正常。

1 个答案:

答案 0 :(得分:4)

do...while块在正方形中生成一个带角(±1,±1)的点,直到该点适合原点为中心的半径为1的圆。预期的迭代次数是区域的比率,它是常数4 /π,或者是大O符号中的O(1)。

至于该过程如何与高斯分布相关,它是Box-Muller transform的应用。 Here是另一页,其中包含一些解释,其中也包含您的代码。