算法之二项分布(php版)

来源:互联网 发布:网络节点 编辑:程序博客网 时间:2024/06/09 16:55

二项分布是数学的概念,定义及公式定理不在此说明.
注:递归版第三步及递推都依赖于C(M-1,N-1)+C(M-1,N)=C(M,N)的变形
递归版:
(我给递归版注释了1 2 3 是为了解析非递归版(递推版)中同等的操作
1 2 3)方便我们理解是怎么让递归变成递推的

function binomial($N,$k,$p)    {    // 1        if($N < 0 || $k < 0)            return 0.0;    //2        if($N == 0 && $k == 0)            return 1.0;    //3        return (1.0 - $p) * binomial($N - 1,$k,$p) + $p * binomial($N - 1,$k - 1,$p);    }

非递归版:

function binomial($N,$k,$p)    {        if ($N < 0 || $k < 0)            return 0.0;        //1        $ret[0][0] = 1.0;        //2        for ($i = 1; $i < $N + 1; ++$i)            $ret[$i][0] = (1.0 - $p) * $ret[$i - 1][0];        for ($j = 1; $j < $k + 1; ++$j)            $ret[0][$j] = 0.0;        //3        for ($i = 1; $i < $N + 1; ++$i)            for ($j = 1; $j < $k + 1; ++$j)                $ret[$i][$j] = (1.0 - $p) * $ret[$i - 1][$j] + $p * $ret[$i - 1][$j - 1];            return $ret[$N][$k];    }

运行:
这里写图片描述
这里写图片描述