大家好,大家好,我是写代码成bug的大头菜。 公众号:大头菜科技()。 原创不易,但欢迎转载。
前言
有网友指出,在《面试Java——收敛之和》一文中,至于为什么是8,还可以加上一句符合泊松分布的句子。 所以我了解泊松的发表后,确实和网友说的一致。 同时也非常感谢这位网友指出了文章中的缺陷。 在接下来的内容中,大头菜将尝试使用泊松分布来演示为什么链表成为树的阈值是8。
泊松分布
首先,什么是泊松分布?
维基百科官网解释:
泊松布(法语:loi de,英语:)又称为散布、帕森布、布瓦松布、泊松布、泊松布、泊松布、布散布、派松小数定律(小定律),是一种常见的离散概率分布统计与概率论,由法国数学家西蒙·丹尼斯·泊松于 1838 年发表。
泊松分布适合描述单位时间内发生的随机事件数量的概率分布。 例如,某个服务设施在一定时间内收到的服务请求数、电话交换机接到的呼叫数、公交车站的乘客数、机器故障数、自然数等。灾难、DNA序列突变的数量、放射性、原子核的衰变数量、激光的光子数量传播等。
泊松分布的概率质量函数为:
让我简单总结一下:泊松分布描述了单位时间内发生的独立事件的数量。
举个简单的例子让大家熟悉一下:
例如:平均每小时有3个婴儿在医院出生。 下一小时内将有多少个婴儿出生?
可能有6个出生,也可能没有出生。 这是我们无从知晓的事情。
如果尝试用泊松分布来表示:等号右边,P代表概率,N代表某种函数关系,t代表时间,n代表数量什么是阈值,1小时内出生3个婴儿的概率为表示为 P(N(1) = 3)。 等号左边,λ表示事件发生的频率。
未来两个小时内没有婴儿出生的概率是0.25%,这根本就是不可能的。
接下来的一个小时内最多有两个婴儿出生的概率是 80%。
泊松分布的形状大致如上图所示。
可以看到,在频率附近,事件发生的概率最高,然后向两侧对称下降,即变大变小的可能性变小。 如果每小时出生三个婴儿,这是最有可能的结果什么是阈值,出生的婴儿越多或越少,这种可能性就越小。
读完示例后,您应该对泊松分布有一个粗略的了解。 接下来,我们尝试使用泊松分布来分析链表到树。
为什么链表转树的阈值是8?
根据泊松分布:单位时间内发生的独立事件的数量。
按键碰撞问题,每次按键碰撞可以被认为是一个独立的事件。 与上次按键冲突还是下次按键冲突无关。
因此,用泊松分布尝试表达:P代表概率,N代表某种函数关系,t代表时间,n代表数量,每1秒密钥传输碰撞次数为k,表达为P(N( 1) = k )。 等号左边,λ表示事件发生的频率。 密钥发生冲突的概率为 0.5。
将相应的值代入泊松分布公式:
$P(N(1)=k) = 0.6065*(0.5^k)/k!$
是不是发现上面的后果有点眼熟:
对比文字:
* 0: 0.60653066
* 1: 0.30326533
* 2: 0.07581633
* 3: 0.01263606
* 4: 0.00157952
* 5: 0.00015795
* 6: 0.00001316
* 7: 0.00000094
* 8: 0.00000006
* more: less than 1 in ten million
当k=9时,即碰撞次数为9时,概率为3亿,碰撞概率有限接近于0。
如果设置为9,则意味着几乎不会发生碰撞。 换句话说,现在链表的长度是8,碰撞只会从链表变成树。 但它永远不会成为一棵树,因为概率太小了。 所以设置为9确实没有必要。
这就是为什么链表成为树的阈值是8。
参考资料
非常感谢您阅读本文。 如果您觉得文章写得不错,请关注、点赞、分享(对我来说非常有用)。
如果您觉得文章需要改进,非常期待您对我的建议,请留言。
如果您有什么想看的,我很乐意听取您的意见。
您的支持和支持是我创作最大的能量源泉!