为什么叫二项分布,又为什么叫多项分布?

本文详细介绍了二项分布和多项分布的概念、原理及应用,通过掷硬币的例子直观解释了二项分布,并推广到多项分布,适用于概率统计领域的学习者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

看到的一篇


为什么叫二项分布,又为什么叫多项分布?
 比较简单容易理解的文章,貌似是电子书的一章告诉你为什么叫二项分布,又为什么叫多项分布。
二项分布

如果掷一枚硬币,正面向上的结局的概率为0.5 。反面向上的结局的概率也是0.5。那么出现正面向上事件或者反面向上事件的概率就是0.5+0.5=1,即二者必居其一。

如果掷两次硬币,根据独立事件的概率乘法定理那么两次都是正面(反面)向上的概率是0.5×0.5=0.25。另外第一个是正第二个是反的出现概率也是0.5×0.5=0.25。同理第一个反第二个正的出现概率也是0.5×0.5=0.25。于是一正一反的概率是前面两个情况的和,即0.25+0.25=2×0.25=0.5。它们的合计值仍然是1。列成表就是:

两个正面的概率

一正一反的概率

两个反面的概率

0.25

2×0.25=0.5

0.25

 

注意到代数学中

(a+b)2=a2+2ab+b2,

而在a=0.5,b=0.5时,有

12=(0.5+0.5)2=0.25+2×0.5×0.5+0.25=1

这说明掷两次硬币的各个结局的出现概率可以通过对二项式的平方展开而得到。顺此,对于掷n次硬币的各种结局的出现概率也可以通过对二项式的n次方的展开而得到。

例如n=3时,有(注意0.5×0.5×0.5=0.125)

13=(0.5+0.5)3=0.125+3×0.125+3×0.125+0.125=

0.125+0.375+0.375+0.125=1

上式4项中的4个概率值0.1250.3750.3750.125分别对应于3正、21反、12反和3反,这四种结局。

注意到对二项式的展开的牛顿公式:

(a+b)n=an+nan-1b++[n!/m!(n-m)!](an-mbm)+bn

ab分别等于0.5代入上式我们就得到n+1项,以其通项而论,它就代表了有n-m个正面m个反面的事件的出现概率。即这种类型的问题(如掷多次硬币)的概率分布恰好可以用二项式展开的牛顿公式表示。而这也就是为什么把这种概率分布类型称为二项分布的原因。

如果ab并不等于0.5,那么只要把A事件出现的概率以p代入,把B事件的出现概率以(1-p)代入,以上公式仍然正确,(a+b仍然=1)。

所以对于仅有AB两个结局的随机事件,如果A事件出现概率为pB事件的出现概率为1-p,那么在n次随机实验中A事件出现n-m B事件出现m次的情况(对应一种复合事件)的出现概率P应当是(这里的P是大写的)

P=[n!/m!(n-m)!][pn-m(1-p)m]

注意到上面公式的对称性,它也可以写为

P=[n!/m!(n-m)!][pm(1-p)n-m]

它就是所谓二项分布概型的随机事件的出现概率公式,也是牛顿二项式展开在变量为对应概率值的情况下的通项。它就是本章公式(11.3)的由来。

另外,当p=0.5时,显然[pm(1-p)n-m]总是等于1/(2)n,注意到[p+(1-p)]n=1,所以二项式公式展开的n+1项的各个系数的合计值应当等于2n

为什么叫二项分布,又为什么叫多项分布?

上式中并没有p,所以这个系数和公式与p的具体数值无关。一般概率图书中对二项分布多有介绍。

为什么叫二项分布,又为什么叫多项分布?多项分布

把二项分布公式再推广,就得到了多项分布(在一般概率书中很少介绍它,但是热力学中涉及到它)。

某随机实验如果有k个可能结局A1A2Ak,它们的概率分布分别是p1p2pk,那么在N次采样的总结果中,A1出现n1次,A2出现n2次,Ak出现nk次的这种事件的出现概率P有下面公式:

为什么叫二项分布,又为什么叫多项分布?

这就是多项分布的概率公式。把它称为多项式分布显然是因为它是一种特殊的多项式展开式的通项。

我们知道,在代数学里当k变量的和的N次方的展开式 (p1+ p2+…+ p)N是一个多项式,其一般项就是前面的公式给出的值。如果这变量恰好是可能有的各种结局的出现概率,那么,由于这些概率的合计值对应一个必然事件的概率。而必然事件的概率等于1,于是上面的多项式就变成了

(p1+ p2+…+ p)N =1N=1

即此时多项式的值等于1

因为(p1+ p2+…+ p)N的值等于1。我们也就认为它代表了一个必然事件进行了次抽样的概率(=1,必然事件)。而当把这个多项式可以展开成很多项时,这些项的合计值等于1提示我们这些项是一些互不相容的事件(N次抽样得到的)的对应概率。即多项式展开式的每一项都是一个特殊的事件的出现概率。于是我们把展开式的通项作为A1出现n1次,A2出现n2次,Ak出现nk次的这种事件的出现概率。这样就得到了前面的公式。

如果各个单独事件的出现概率p1p2pk都相等,即p1=p2=…=pk=p(注意这里是小写的p),

注意到p1+p2+…+pk =1,就得到p1=p2 =…=pk =p=1/

把这个值代入多项式的展开式,就使展开式的各个项的合计值满足下式:

N!/(n1!n2!…nk!)](1/k)N=1

即∑N!/(n1!n2!…nk!)]=kN

以上求和中遍及各个ni的一切可能取的正整数值,但是要求各个ni的合计值等于。  

n1+n2+…nk=N

在热力学讨论物质微观状态的可能个数时,经常用另外的思路引出N!/(n1!n2!…nk!)式。并且称它为热力学几率。它是一个比天文数字还大很多的数,把它称为几率(概率)并不妥当。但是热力学里由于各个微观状态的出现概率相等,这对应我们在前面讨论的p1=p2 =…=pk =p=1/k于是

[N!/(n1!n2!…nk!)]1/kN

就真正具有数学上的概率的含义。换句话说,物理学里的热力学几率[N!/(n1!n2!…nk!)]乘上(1/kN)以后就是数学中定义的(具有归一性)的概率了。

<think>好的,我现在需要帮助用户了解或实现得物签名的相关技术,特别是签名算法的实现方式。首先,我需要收集已有的信息。根据用户提供的引用,特别是引用[4]和[5],得物的签名算法可能涉及逆向工程分析,使用了JavaScript中的XMLHttpRequest重写来拦截请求,并在请求中包含特定的sign参数。这可能意味着签名生成是在客户端进行的,通常在前端JavaScript代码中完成。 接下来,我应该考虑常见的签名生成方法。常见的Web应用签名算法通常使用HMAC、AES、RSA或自定义的哈希组合。引用[1]提到了RSA算法,但得物的签名可能更倾向于使用HMAC-SHA256之类的哈希算法,结合时间戳、随机数和请求参数进行签名,以防止篡改和重放攻击。 用户可能需要具体的步骤,比如逆向分析得物的JavaScript代码,找到生成sign的函数,提取关键参数和加密逻辑。引用[5]中的代码片段展示了如何重写XMLHttpRequest的open方法来拦截请求,这可能用于调试和定位签名生成的代码位置。 此外,引用[4]提到使用Python进行算法还原,所以可能需要在Python中复现JavaScript的签名生成逻辑。这通常涉及分析请求参数如何排序、拼接,以及如何与密钥结合进行哈希或加密。需要注意反爬机制,如obfuscation(代码混淆)或动态密钥,这可能需要使用AST(抽象语法树)解析或动态执行来还原算法。 用户可能还需要了解如何应对反调试措施,比如在Chrome开发者工具中使用断点调试,或者使用工具如Frida进行Hook。同时,引用[3]和[4]强调了法律和合规问题,确保研究仅用于学习目的,不用于非法用途。 最后,应该提醒用户注意法律风险,遵循网站的使用条款,避免侵犯知识产权或违反计算机安全法律。总结起来,实现得物签名需要逆向工程分析前端代码,提取关键算法,处理可能的混淆和反调试,最后用目标语言如Python复现算法。</think>### 得物签名算法实现方式分析 得物签名算法主要用于接口请求的身份验证和防篡改保护,常见实现方式涉及以下技术点: #### 1. **签名参数组成** 签名通常由以下参数动态生成: - 请求参数(经排序、过滤空值后拼接) - 时间戳(如:$timestamp=1620000000$) - 随机数(如:$nonce=5a8s3d$) - 设备指纹(如:$device\_id=abcdef$) - 应用密钥(加密盐值,可能动态获取)[^4] 示例参数拼接逻辑: $$ \text{sign\_str} = \text{path} + \text{sorted\_params} + \text{timestamp} + \text{nonce} $$ #### 2. **加密算法类型** 根据逆向分析,得物可能采用以下组合: - **HMAC-SHA256**:对拼接字符串进行哈希运算 - **AES/Base64编码**:对结果二次处理 - **自定义位移/异或操作**:增加逆向难度[^5] #### 3. **JavaScript代码混淆** 关键函数可能被混淆,例如: ```javascript function _0x12ab5(a, b) { return a ^ b << 3; } // 需要AST解析还原控制流 ``` #### 4. **Python算法还原示例** ```python import hmac import hashlib def generate_sign(params, secret_key): # 1. 参数排序并拼接 sorted_str = '&'.join([f"{k}={v}" for k,v in sorted(params.items())]) # 2. HMAC-SHA256加密 sign = hmac.new(secret_key.encode(), sorted_str.encode(), hashlib.sha256).hexdigest() # 3. 自定义处理(示例) return sign.upper() + str(int(time.time())) ``` #### 5. **反爬对抗措施** - 动态密钥:通过接口定期更新加密盐值 - 环境检测:验证是否在真机环境运行 - 请求频率限制:异常高频触发验证码[^5]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值