machine-learning:数学:概率论

1. 概率论基础

1.1 概率论

P(X)[0,1]

1.2 条件概率

  • 条件概率:

    P(A|B)=P(AB)P(B)

  • 全概率:

    P(A)=iP(A|Bi)P(Bi)

  • 贝叶斯:

    P(Bi|A)=P(A|Bi)P(Bi)iP(A|Bi)P(Bj)


2. 古典概率

  • 基本公式:

P(A)=AS

  • 排列

Pnr=n(n1)(n2)...(nr+1)

  • 组合

Cnr=Pnrr!=n!r!(nr)!

  • 装箱

n个相异物品分为k堆,各堆的物件数是

r1,r2,...,rk
的分法是

n!r1!...rk!

n个物品分为2组,第一组m个,第二组n-m个,则分组的方法

n!m!(nm)!

即:

Cmn

2.1 典型古典概率

  • 将n个不同的球放入N(N>=n)个盒子里,假设盒子的容量无限,求A={每个盒子至多有一个球的概率}

解:

  1. 基本事件总数

    • 第1个球:N种方法

    • 第2个球:N种方法

    ……

    总: Nn 种方法

  2. 每个盒子至少放1个球的事件数:

    • 第1个球:N种

    • 第2个球:N-1种
      ……
      总: N(N1)...(Nn+1)=PnN

P(A)=PnNNn

  • 装箱问题:将12件正品和3件次品随机装在3个箱子中,每箱装5件,则每箱中恰有1件次品的概率是多少?

解:

  1. 将15件产品装入3个箱子,每个箱子5件,共: 15!/(5!5!5!)

  2. 将3件次品放入3个箱子,有3!种方法。对于这样的每一个装法,将其余12件产品装入3个箱子,每个箱子有4件,共: 12!/(4!4!4!)

  3. P(A)=(3!12!/(4!4!4!)/(15!/(5!5!5!)))


2. 概率分布


  • CDF:累计分布函数(cumulative disrtibution function)

  • pdf: 概率密度(Probability Density Function)


2.1 离散分布

2.1.1 两点分布(0-1分布)

  • x=1; p=p

  • x=0; p=1-p=q

  • E(X)=1p+0q=p

  • D(X)=E(X2)[E(X)]2=12p+02(1p)p2=pq

2.1.2 二项分布:(n,p)

  • PX=k=(nk)pk(1p)nk ……(k=0,1,2,…)

  • E(x)=np

  • D(x)=np(1p)=npq

2.1.3 泊松分布: π(λ)


2.2 连续分布


2.2.1 均匀分布

  • XU(a,b) ,其概率密度是:

f(x)=1ba......x(a,b)0......

  • E(X)=+xf(x)dx=ba1baxdx=12(a+b)

  • D(X)=E(X2)[E(X)]2=(ba)212


2.2.2 正态分布

  • XN(μ,σ2)

  • 概率密度函数:

f(x)=12πσe(xμ)22σ2

  • E(X)=μ

  • D(X)=σ2

这道题可以使用递归来解决。假设现在需要将 $A$ 个红和 $B$ 个蓝放进 $N$ 个盒子,可以分为以下三种情况: 1. 当前盒子不放,继续考虑下一个盒子; 2. 当前盒子只放红或蓝,继续考虑下一个盒子,并将 $A$ 或 $B$ 的值减去 1; 3. 当前盒子放红和蓝,继续考虑下一个盒子,并将 $A$ 和 $B$ 的值均减去 1。 使用递归的方式,将问题规模逐渐缩小,直到所有都被放入盒子,此时方案数加 1。代码如下: ```c #include <stdio.h> int count = 0; void dfs(int n, int a, int b) { if (n == 0) { // 所有盒子都已考虑完毕,方案数加 1 count++; return; } // 当前盒子不放 dfs(n - 1, a, b); // 当前盒子只放红 if (a > 0) { dfs(n - 1, a - 1, b); } // 当前盒子只放蓝 if (b > 0) { dfs(n - 1, a, b - 1); } // 当前盒子放红和蓝 if (a > 0 && b > 0) { dfs(n - 1, a - 1, b - 1); } } int main() { int n, a, b; scanf("%d%d%d", &n, &a, &b); dfs(n, a, b); printf("%d", count); return 0; } ``` 具体实现,使用全局变量 `count` 记录方案数,使用函数 `dfs` 进行递归。在函数,首先判断是否所有盒子都已考虑完毕,如果是,则方案数加 1 并返回;否则,分别考虑当前盒子不放、只放红、只放蓝、放红和蓝的四种情况,并继续递归考虑下一个盒子。最后,在主函数读入输入数据,调用 `dfs` 函数计算方案数,并输出结果。 需要注意的是,当 $A$ 和 $B$ 的值较大时,递归深度可能会非常大,导致栈溢出。可以使用尾递归优化或改为迭代实现来解决这个问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值