排列组合概率近似计算学习理解的散分贴
前不久在计算概率方面遇到些困难,见贴。有网友给出了斯特林
http://bbs.csdn.net/topics/390916953
http://bbs.csdn.net/topics/390905211(这个帖子也很有意思的)
因为自己的数学知识丢得太多了,所以重新学习对数,才发现原来对数就是为了简化运算而发明的。。。
现在贴一些简化运算方面的个人理解,希望各位大神多建议
1. 首先实现一个对阶乘求常用对数的函数
lg_fact(n) = lg(n!) = lg(1) + lg(2) + ... + lg(n) ,这个很容易实现,不会出现大数
2. 然后实现对排列求常用对数的函数
lg_a(n,m) = lg(A(n,m)) = lg(n!/(n-m)!) = lg_fact(n) - lg_fact(n-m)
3. 然后实现对组合求常用对数的函数
lg_c(n,m) = lg(C(n,m)) = lg(A(n,m)/m!) = lg_a(n,m) - lg_fact(m) = lg_fact(n) - lg_fact(n-m) - lg_fact(n)
4. 最后求概率
例如:52张牌中抽两张牌,是AK的概率
p = (4*4)/C(52,2)
lg(p) = lg(16/lg_c(52,2)), 这个式子好计算,注意如果得到的是正数,说明p的公式有问题导致分子大于分母
最后 p = 10^(lg(p))