从经理穿着皮鞋能不能扣篮,引起了一段思考。

周六上午在家带娃,我已经快崩溃,所以作文时间放在了午后。

假如你相信上帝真的是在掷骰子,那么我们的世界就是上帝的一系列实验生成的。
假如你相信世界是二元元素的组合,那么使用二进制便可以完整描述整个世界。

一切从二项分布开始裂变。


二项分布

让我们看一道非常简单的概率统计习题:
如果做一次实验,一个独立的事件EEE发生的概率是ppp,那么请问,连续做nnn次实验,让事件EEE发生kkk次的概率是多少?

非常简单的习题,只要知道独立事件同时发生的概率相乘性质即可解题。

  1. 单次事件发生的概率就是ppp,单次事件不发生的概率是1−p1-p1−p
  2. 事件发生kkk次的概率就是pkp^kpk
  3. 实验进行了nnn次,kkk次发生了事件,意味着n−kn-kn−k次没有发生事件
  4. n−kn-kn−k次没有发生事件的概率是(1−p)n−k(1-p)^{n-k}(1−p)n−k
  5. 事件的发生与实验顺序无关,故发生kkk次的可能性有CnkC_n^kCnk​种

综上1~4,连续做nnn次实验,事件EEE发生kkk次的概率为:

P(X=k)=Cnk×pk×(1−p)n−kP(X=k)=C_n^k\times p^k\times (1-p)^{n-k}P(X=k)=Cnk​×pk×(1−p)n−k

是的,这就是 二项分布

根据以上的二项分布,我们可以计算出在P(X=k)P(X=k)P(X=k)的概率下,重复实验kkk次,事件发生的 平均次数 为:

λ=n×p\lambda=n\times pλ=n×p


现在让我们来看所谓的 事件 以及 平均次数 的具体意义和性质。

对于在推导二项分布时的我们理解的事件,都是 单次等概率的事件。 即做一次实验,事件发生的概率是相同的,也就是定值ppp,比如抛硬币。利用这类事件,我们已经非常容易地推导出二项分布的式子。

但是还有一种事件,固定的时间内它们发生的 次数 与单次实验事件发生的概率是无关的,而是与连续的时间段或者连续的空间大小有关,即 单位时间/空间内时间发生的次数平均值为定值。 典型的例子就是生产线产品的良品率,无论你用多少条相同的生产线做实验,良品率总是相等的。本文接下来要讨论的所有事件,均是此类事件。

此类事件具有 累加性质 。即 事件在一个连续的时间段或者空间中持续以某种概率发生。

这种事件很难对应到 二项分布 的所谓独立实验重复多次的场景,我们不妨先借用一下λ=n×p\lambda=n\times pλ=n×p这个式子,从事情的本初开始。


负指数分布

再看一遍 一段时间内事件发生平均次数 的式子:

λ=n×p\lambda=n\times pλ=n×p

如果λ\lambdaλ为定值,即在确定的区间内,无论做多少次实验,都不会改变实验成功的次数,我们换一种写法:

p=λ×1np=\lambda\times \dfrac{1}{n}p=λ×n1​

事件发生的概率与1n\dfrac{1}{n}n1​成正比! 至于1n\dfrac{1}{n}n1​如何被解释,我们接着往下看。

如果我们把所谓的 单位时间 规约为1,那么1n\dfrac{1}{n}n1​就是一个小的时间片,整个单位时间被分成了等大小的nnn份,nnn越大,时间片就越小,我们在单位1的约束下,不妨将1n\dfrac{1}{n}n1​看作是Δt\Delta tΔt,那么ppp就是Δt\Delta tΔt内事件发生kkk次的概率:

Pk(Δt)=λΔtP_k(\Delta t)=\lambda \Delta tPk​(Δt)=λΔt

事件发生的概率与时间片的长短成正比!

但是发生几次呢?至少发生1次!也可能发生2次,3次,5次,100次。可是,如果发生次数大于1次,在后面的推导中,便无法拟合二项分布的含义,如何将发生的次数限制在至多1次呢?

答案是 将Δt\Delta tΔt想象成非常小,即发生1次事件的概率都超级小,更何况多次。

所以,在Δt\Delta tΔt非常小的保证下,我们认为PkP_kPk​可以表达成下面的式子:

Pk(Δt)=P1(Δt)+o(Δt)=λΔtP_k(\Delta t)=P_1(\Delta t)+o(\Delta t)=\lambda \Delta tPk​(Δt)=P1​(Δt)+o(Δt)=λΔt

我们将发生事件大于1次的概率看作是一个关于Δt\Delta tΔt高阶无穷小。反正后面我们采用微积分推导时必然保证Δt\Delta tΔt趋向于000,因此高阶无穷小是可以忽略的。

我们忽略高阶无穷小后,有:

P1(Δt)=λΔtP_1(\Delta t)=\lambda \Delta tP1​(Δt)=λΔt

接下来,按照概率的定义,在Δt\Delta tΔt内事件不发生的概率就是:

P0(Δt)=1−λΔtP_0(\Delta t)=1-\lambda \Delta tP0​(Δt)=1−λΔt

我们将其形式化:

P0(t)=1−λtP_0(t)=1-\lambda tP0​(t)=1−λt 【式子1】

注意,虽然我们为了形式化将Δt\Delta tΔt换成了ttt,但是这只是为了数学上推导方便,我们必须记住,自变量ttt是时间片的长短,而不是一个绝对时间!那么按照P0(t)P_0(t)P0​(t)的解释,P0(t+Δt)P_0(t+\Delta t)P0​(t+Δt)的意思就是 时间片长度为t+Δtt+\Delta tt+Δt时事件不发生的概率!

请注意,长度为t+Δtt+\Delta tt+Δt的时间片可以分割为连续的两个小时间片ttt和Δt\Delta tΔt, 时间片t+Δtt+\Delta tt+Δt中不发生事件的概率要求时间片ttt和时间片Δt\Delta tΔt中均不发生事件! 按照概率相乘的原理:

P0(t+Δt)=P0(t)P0(Δt)P_0(t+\Delta t)=P_0(t)P_0(\Delta t)P0​(t+Δt)=P0​(t)P0​(Δt) 【式子2】

代入式子1,我们整理式子2:

P0(t+Δt)=P0(t)(1−λΔt)=P0(t)−λΔtP0(t)P_0(t+\Delta t)=P_0(t)(1-\lambda \Delta t)=P_0(t)-\lambda \Delta tP_0(t)P0​(t+Δt)=P0​(t)(1−λΔt)=P0​(t)−λΔtP0​(t)

稍微变换一下:

P0(t+Δt)−P0(t)Δt=−λP0(t)\dfrac{P_0(t+\Delta t)-P_0(t)}{\Delta t}=-\lambda P_0(t)ΔtP0​(t+Δt)−P0​(t)​=−λP0​(t) 【式子3】

式子3是什么?取极限不就是个求导吗:

lim⁡Δt→0P0(t+Δt)−P0(t)Δt=P0′(t)=−λP0(t)\lim_{\Delta t \to 0}\dfrac{P_0(t+\Delta t)-P_0(t)}{\Delta t}=P_0\prime(t)=-\lambda P_0(t)limΔt→0​ΔtP0​(t+Δt)−P0​(t)​=P0​′(t)=−λP0​(t)

写成微分方式:

d(P0(t))P0(t)dt=−λ\dfrac{d(P_0(t))}{P_0(t)dt}=-\lambdaP0​(t)dtd(P0​(t))​=−λ

两边同时积分,按照第一类换元积分:

∫d(P0(t))P0(t)dtdt=∫1P0(t)d(P0(t))=logeP0(t)=−λt+C\displaystyle\int\dfrac{d(P_0(t))}{P_0(t)dt}dt=\displaystyle\int\dfrac{1}{P_0(t)}d(P_0(t))=log_eP_0(t)=-\lambda t+C∫P0​(t)dtd(P0​(t))​dt=∫P0​(t)1​d(P0​(t))=loge​P0​(t)=−λt+C

取eee的指数得到:

P0(t)=eC×e−λtP_0(t)=e^C\times e^{-\lambda t}P0​(t)=eC×e−λt

ttt是一个时间片,t=0t=0t=0就是无,当然不会有任何事件发生,即P0(0)=1P_0(0)=1P0​(0)=1,即:

P0(t)=e−λtP_0(t)=e^{-\lambda t}P0​(t)=e−λt

在时间片长度为ttt的时间内不发生事件的概率是e−λte^{-\lambda t}e−λt,那么至少发生1个事件的概率就是:

P1(t)=1−e−λtP_1(t)=1-e^{-\lambda t}P1​(t)=1−e−λt

这就是概率积累函数,这不就是 负指数分布 吗?即 单位时间内时间发生平均次数为固定值λ\lambdaλ的事件的时间间隔的概率为负指数分布!


泊松分布

再看一遍 一段时间内事件发生平均次数 的式子:

λ=n×p\lambda=n\times pλ=n×p

这里,我们依然假定λ\lambdaλ为定值。这个是本文通篇的假定。

在推导负指数分布的时候,我们已经将单位时间分割成了要多小有多小的Δt\Delta tΔt,并且我们还知道,这些小的时间片Δt\Delta tΔt内发生1次以上事件的概率为Δt\Delta tΔt的高阶无穷小,在参与取极限,微积分等数学运算的时候是被忽略的,于是我们得到了非常清爽的式子:

P1(Δt)=λΔtP_1(\Delta t)=\lambda \Delta tP1​(Δt)=λΔt

我们将其形式化:

P1(t)=λtP_1(t)=\lambda tP1​(t)=λt

注意,自变量ttt是一个时间段,而不是绝对时间,这里再次强调。

好了,开始我们的推导。

现在我把这个已经非常小的时间片ttt(也就是Δt\Delta tΔt,只是写成ttt好看一些)画出来:

我们终于可以套用 二项分布中的实验模型 了。

  • 在ttt时间片内,发生了一次事件。

我们知道ttt已经非常小,小到可观测范围只能发生1次事件,发生1次以上事件的概率微乎其微(高阶无穷小o(t)o(t)o(t)),然而,由于时间片是连续的,即便再小它依旧是 继续可分的 ,像分形一样,我们把ttt放大,将其再等分成mmm份:

之所以将ttt再继续等分mmm份是因为,我们知道ttt时间片内事件发生的概率是λt\lambda tλt,那么在ttt时间片内,如果事件发生了,那么事件具体在哪一个更精细的时间片内发生,又是一个概率问题:

  1. 是在第1个tm\dfrac{t}{m}mt​时间片里发生吗?
  2. 是在第2个tm\dfrac{t}{m}mt​时间片里发生吗?
  3. 是在第3个tm\dfrac{t}{m}mt​时间片里发生吗?
  4. …是在第mmm个tm\dfrac{t}{m}mt​时间片里发生吗?

到底再哪个小时间片里发生呢?很简单,都有可能发生。都是等概率的,每个小时间片发生事件的概率均为1m\dfrac{1}{m}m1​,按照概率相乘的规则:

  • 事件在ttt事件片发生的概率为λt\lambda tλt
  • 事件如果真的在ttt时间片发生,那么它在某一个tm\dfrac{t}{m}mt​小时间片发生的概率就是λt×1m\lambda t\times \dfrac{1}{m}λt×m1​

是的,概率就是

P=λt×1mP=\lambda t\times \dfrac{1}{m}P=λt×m1​

哈哈,为了得到概率分布,我们可以做实验了:

  • 连续做kkk次实验,k&lt;mk&lt;mk<m,每次实验事件发生的概率是λt×1m\lambda t\times \dfrac{1}{m}λt×m1​

这就是一个典型的二项分布:

P(X=k)=Cmk×(λtm)k×(1−λtm)m−kP(X=k)=C_m^k\times (\dfrac{\lambda t}{m})^k\times (1-\dfrac{\lambda t}{m})^{m-k}P(X=k)=Cmk​×(mλt​)k×(1−mλt​)m−k

现在事情可以开始了。

由于时间是连续流逝的(空间也一样),那么时间片就是无限可分割的,我们求一个连续变量下事件发生的概率,需要就是将时间片(或者空间) 无限分割

以上这个式子里,其实ttt已经是无限分割的结果了,但是我们不要在乎ttt,只需知道在ttt时间片里至多发生1次事件就好了,重要的是, 我们将ttt分割mmm份,让mmm趋向于无穷大会怎样?

求极限:

lim⁡m→∞Cmk×(λtm)k×(1−λtm)m−k\lim_{m \to \infty}C_m^k\times (\dfrac{\lambda t}{m})^k\times (1-\dfrac{\lambda t}{m})^{m-k}limm→∞​Cmk​×(mλt​)k×(1−mλt​)m−k

直接求解即可,其中只需要应用一个重要极限公式,一切迎刃而解:

lim⁡m→∞(1−λtm)m=lim⁡m→∞(1−1mλt)mλtλt=eλt\lim_{m \to \infty}(1-\dfrac{\lambda t}{m})^m=\lim_{m \to \infty}(1-\dfrac{1}{\frac{m}{\lambda t}})^{\frac{m}{\lambda t}\lambda t}=e^{\lambda t}limm→∞​(1−mλt​)m=limm→∞​(1−λtm​1​)λtm​λt=eλt

直接写答案吧:

P(X=k)=e−λt(λt)kk!P(X=k)=\dfrac{e^{-\lambda t} (\lambda t)^k}{k!}P(X=k)=k!e−λt(λt)k​

这是什么?这就是 泊松分布。

单位时间内时间发生平均次数为固定值λ\lambdaλ的事件在单位时间内发生的次数符合泊松分布!


所以说,负指数分布和泊松分布是一回事。它们两个均可以从 单位时间内时间发生平均次数为固定值λ\lambdaλ 这个大前提推导出来。


生灭过程和排队

有来必有往,有去必有回。

我们为所谓的事件赋予其意义。

把单位时间发生的事件的看作 请求的到达 ,那么, 请求被处理 自然也可以被看作是同类的事件。

请求不断地到达,又不断地被处理,这是一个马尔可夫过程,最终这个过程就形成了一个马尔可夫链,每一个状态,我们可以看作是 未被处理请求为iii的概率

由于请求的到来和被处理均是统计分布,那么统计意义的突发必然会造成排队,即上述的马尔可夫过程必然向后延展,然而如果系统是稳定的,积压的请求将会在突发空闲期被持续处理,从而使得马尔可夫过程向前收缩,最终对于每一个状态而言,都将达成一个平衡:

Pi−1λ+Pi+1μ=Piλ+PiμP_{i-1}\lambda+P_{i+1}\mu=P_i\lambda+P_i\muPi−1​λ+Pi+1​μ=Pi​λ+Pi​μ

此外,系统中所有的状态的概率之和恒等于111:

Σi=0nPi=1\displaystyle \Sigma_{i=0}^{n}P_i=1Σi=0n​Pi​=1

此外,对于状态000,它没有前置状态,所以必然有:

P0λ=P1μP_0\lambda = P_1\muP0​λ=P1​μ

我们用此而递推:

P0λ+P2μ=P1(λ+μ)P_{0}\lambda+P_{2}\mu=P_1(\lambda+\mu)P0​λ+P2​μ=P1​(λ+μ)
P1λ+P3μ=P2(λ+μ)P_{1}\lambda+P_{3}\mu=P_2(\lambda+\mu)P1​λ+P3​μ=P2​(λ+μ)
P2λ+P4μ=P3(λ+μ)P_{2}\lambda+P_{4}\mu=P_3(\lambda+\mu)P2​λ+P4​μ=P3​(λ+μ)
.........
Piλ+Pi+2μ=Pi+1(λ+μ)P_{i}\lambda+P_{i+2}\mu=P_{i+1}(\lambda+\mu)Pi​λ+Pi+2​μ=Pi+1​(λ+μ)

上面所有式子整理,得到:

Pi=(λμ)iP0P_i=(\dfrac{\lambda}{\mu})^iP_0Pi​=(μλ​)iP0​

进一步:

Σi=0nPi=P0Σi=0n(λμ)i=1\displaystyle \Sigma_{i=0}^{n}P_i=P_0\Sigma_{i=0}^{n}(\dfrac{\lambda}{\mu})^i=1Σi=0n​Pi​=P0​Σi=0n​(μλ​)i=1

数列求和而已:

P0μμ−λ=1P_0\dfrac{\mu}{\mu-\lambda}=1P0​μ−λμ​=1

嗯,这样就求出了P0P_0P0​:

P0=1−λμP_0=1-\dfrac{\lambda}{\mu}P0​=1−μλ​

那么PiP_iPi​自然也求出来了:

Pi=(1−λμ)(λμ)iP_i=(1-\dfrac{\lambda}{\mu})(\dfrac{\lambda}{\mu})^iPi​=(1−μλ​)(μλ​)i

接下来,排队论基础中的典型结论基本就都能出来了:

  • 平均排队实体数量
    Navg=ΣnnPn=λμ−λN_{avg}=\Sigma_{n}nP_n=\dfrac{\lambda}{\mu-\lambda}Navg​=Σn​nPn​=μ−λλ​
  • 平均等待时延
    Tavg=Nλ=1μ−λT_{avg}=\dfrac{N}{\lambda}=\dfrac{1}{\mu-\lambda}Tavg​=λN​=μ−λ1​.

现在公式都可以非常简单明确地根据泊松分布,负指数分布推导出来了,但是问题是, 你真的相信世界上的一些事情符合泊松分布吗?或者说,即便你相信它们符合,它们真的符合泊松分布吗?

如果是,那么上面的公式就可以描述一切,如果不是,怎么办?


泊松分布/排队论的适用性

基于泊松分布/负指数分布的排队论不适用任何现实场景!!

因为现实中根本就没有什么事件规律符合泊松分布。

我们以为路面某个监测点的车辆的到达符合泊松分布,但是非也!几乎可以肯定,人是喜欢跟风的,这意味着车辆到达某个点并非独立事件,这也是交通拥堵的根本原因。

我们以为互联网交换节点数据包的到达符合泊松分布,但是非也!数据包确实具有突发性达到的特征,但是前后两个数据包之间关联着巨大的粘性,它们并非独立到达的。这也是我在2014年设计状态防火墙cache的依据,利用局部性嘛。

之所以泊松分布的结论被如此普遍地被利用,完全在于 其在数学上非常容易处理,容易预测后事。 然后我们利用现实的参数,给予矫正,即可得到相当不错的结论。

其实仔细想想,世界本应该就是泊松分布主宰的,所谓的跟风和粘性,那可能是人性使然。路面上车里的司机,你不认识我,我也不认识你,大家却往同一条路上走,如果不是 我相信别人有更好的选择 ,那么就是别无选择了…对了,上下班高峰,节假日,天气,也会让泊松分布失效。但这些说来说去还是因为人为原因导致,比如人都是白天才出门,晚上则闭户。所以说,你要把事件尺度拉大,在以年为单位时间的范围,或者更长的单位1,泊松分布将会越离越拟合现实。


单队列和多队列的问题

存在多个服务台的情况下,到底是单队列效率高还是多队列效率高?

这个我们来算一下。

M/M/1情况下,单队列,排队实体的平均等待延时为:

Tsingle=11×μ−λT_{single}=\dfrac{1}{1\times\mu-\lambda}Tsingle​=1×μ−λ1​.

如果队列被分成了NNN个,那么单位111作用于每一个队列则为1N\dfrac{1}{N}N1​,而平均到达率对于每一个队列,均将是λN\dfrac{\lambda}{N}Nλ​,平均等待时间,代入上式:

Tmulti=1(1N)×μ−λN=N×TsingleT_{multi}=\dfrac{1}{(\dfrac{1}{N})\times \mu-\dfrac{\lambda}{N}}=N\times T_{single}Tmulti​=(N1​)×μ−Nλ​1​=N×Tsingle​

很遗憾,有点有悖于常识,如果采用多队列,平均等待时间将会延长!这就是为什么对于以太网这种统计复用的突发流量网络而言,并没有采用任何XDM(X可为时间,频率…)的策略,而只是采用了时间域上单队列退避的CSMA/CD策略的原因!

然而,比如以Linux内核而论,进程调度, 却是多队列的,每CPU核心一个队列,这是Why?这是因为,相比于进程的到达和被调度,锁以及cache miss的开销更大,这纯粹是一个实现上的工程优化,不伤排队论的大雅,和算法无关。

经理能不能扣篮

经理穿着皮鞋能扣篮吗?我觉得能。

经理能扣篮,但不经常,也不绝对。

这就跟总有那么一个非零的概率,一个立方的空气分子全部朝着一个方向运动是一样的道理。

经理能扣篮,这只是一个概率性的结论,经理能扣篮并不意味着经理扣篮就一定能成功。


浙江温州皮鞋湿,下雨进水不会胖。

从负指数分布/泊松分布到排队论(经理能扣篮,但不经常也不绝对)相关推荐

  1. C#产生正态分布、泊松分布、指数分布、负指数分布随机数(原创)

    http://blog.sina.com.cn/s/blog_76c31b8e0100qskf.html 在编程过程中,由于数据仿真模拟的需要,我们经常需要产生一些随机数,在C#中,产生一般随机数用R ...

  2. python学习笔记:泊松分布和负指数分布随机数的python实现

    不能算是纯原创吧,算半个转载好了,但保证一定能用! 首先导入模块 import math import random 泊松分布 def poisson(L):"""poi ...

  3. 概率特性仿真实验与程序-Matlab仿真-随机数生成-负指数分布-k阶爱尔兰分布-超指数分布

    概率特性仿真实验与程序-Matlab仿真-随机数生成-负指数分布-k阶爱尔兰分布-超指数分布 使用Java中的SecureRandom.nextDouble()生成一个0~1之间的随机浮点数,然后使用 ...

  4. 排队论---单服务台负指数分布排队系统的分析

    2019独角兽企业重金招聘Python工程师标准>>> 标准的 M / M / 1 模型 系统的容量有限制的情况 顾客源为有限的情形 转载于:https://my.oschina.n ...

  5. 排队论---多服务台负指数分布排队系统的分析

    2019独角兽企业重金招聘Python工程师标准>>> 标准的 M / M / c模型 M / M / c型系统和 c 个 M / M / 1 型系统的比较 系统的容量有限制的情形 ...

  6. 【优化模型】单服务台负指数分布排队系统分析 — M/M/1模型

    目录 1.M/M/1模型 2.标准型:M/M/1(M/M/1//) 3.关于的说明 4.系统运行指标

  7. MATLAB生成负指数分布

    实现代码如下: x=0:0.001:10; y=5*exp(-x); plot(x,y);

  8. 运筹优化(十六)--排队论基础及其最优化求解

    排队过程的一般表示 下图1就是排队过程的一般模型.各个顾客由顾客源(总体)出发,到达服务机构 (服务台.服务员)前排队等候接受服务, 服务完成后就离开.排队结构指队列的数目和排列方式 , 排队规则和服 ...

  9. c语言大作业 模拟泊松分布,怎样用C语言模拟泊松分布

    每个事件的时间间隔按照指数分布,就可以满足事件在单位时间内发生的次数是按照泊松分布的 先顺便说一句,关于二项分布这个名称可以这样认为:发生k个事件的概率是二项展开式中的第k项.概率与二项展开式紧密联系 ...

  10. 排队论在食堂排队中的运用

    一.问题描述 排队在日常生活中是非常常见的现象.在学校中,每次到了饭点的时间,食堂都会水泄不通,对于同学们来说,减少排队等待时间是同学们的需求,但是对于食堂来说,增加窗口的同时,也会相应增加运营成本, ...

最新文章

  1. 谷歌OKR指导手册 (译)
  2. Java基础学习巩固3--重载和重写分析及区别
  3. Android Camera的进化史
  4. 26-Ubuntu-文件和目录命令-其他命令-管道
  5. PHP全栈开发(八):CSS Ⅹ 导航栏制作
  6. osg专业名词:LOD、数据分页、动态调度
  7. eclipse中JS文件乱码
  8. [导入]用事件和异常返回多种结果
  9. 详解SQL2005中的AWE
  10. Affinity 1.10 版本更新,性能提升
  11. 学习指南:零基础java入门教程(入门篇)
  12. 日历 C语言算法,【求助】万年历算法
  13. 【Proteus】超声波测距
  14. 关于html的实训日志,满足你的甜蜜幻想, 《我与她的实习日志》登陆NS
  15. 为什么实对称矩阵要求其正交矩阵,而不是可逆矩阵使其对角化?
  16. 虚拟偶像主播的大致现状,数字人技术现状
  17. 心心念念想打游戏,游戏 套路有哪些?怎么做留存?
  18. warning:4005 DXGI_STATUS_OCCLUDED,宏重定义
  19. 超级计算机多层网络,超级计算机的多层架构抽象及描述
  20. 并发编程 Java 三把锁(Synchronized、ReentrantLock、ReadWriteLock)

热门文章

  1. msvcr71.dll控件常规安装
  2. eclipse中创建一个server使用tomcat服务
  3. 计算机组装小游戏,电脑组装店游戏
  4. LNode *和LinkList的小区分
  5. Android 开机时间慢问题debug
  6. 单片机实验三 独立按键控制LED实验
  7. STC51单片机-实验开发装置仿真-物联网应用系统设计
  8. 空间滤波器 平滑滤波器 锐化滤波器
  9. 计算机网络单向ping通,单向可Ping通的原因与原理
  10. SI24R1:国产低功耗2.4GHz收发遥控工控答题卡方案芯片替代NRF24L01+