算法工程师面试题--概率题

本文介绍了算法工程师面试中常见的概率题目,包括圆内随机抽样、组成三角形的概率、吃苹果问题、扔骰子的期望次数、球涂白的期望次数以及宝剑升级次数的期望。每个问题都详细阐述了问题背景、解答方法和相关分析。

常考题目

1- 圆内随机抽样

问题:

如何实现在半径为1的圆内均匀随机抽样

方法:

  • 方法:
    x ∈ [ − 1 , 1 ] , y ∈ [ − 1 , 1 ] x\in [-1,1], y\in [-1,1] x[1,1],y[1,1]随机选取,如果此点在圆内,就是所求的点。

相关问题:能够通过半径和角度的形式实现?

角度 [0,2pi] 均匀选取,但是半径选择概率需要和圆心距离成正比。

2- 组成三角形的概率

问题:

一根木棍截成3截,组成三角形的概率?

回答:

p = 1/4
设原木棍长度为1,截成三段为x,y,z , 则 z = 1-x-y
在这里插入图片描述

3- 吃苹果

问题:

2人扔硬币决定谁先吃这个苹果,抛到正面者吃,求先抛硬币的人吃到的概率。

回答

p = 2 3 p = \frac{2}{3} p=32

先手者在第 1、3、5、7、…次抛
后手者在第 2、4、6、8、…次抛
假设先手者吃到苹果的概率为 p p p,第一次抛硬币得到苹果的概率为 1 2 \frac{1}{2} 21,在第3次(3、5、7.)得到苹果的概率为 p 4 \frac{p}{4} 4p,(一二次都反面)。
p = 1 2 + p 4 p = \frac{1}{2} + \frac{p}{4} p=21+4p

4- 扔骰子的期望

问题

抛一个6面的骰子,连续抛,直到为6为止,期望抛的次数是多少?

回答

方法一:
p = 1/6, E = 1 p \frac{1}{p} p1 = 6

方法二:
有1/6的概率第一次就扔到6,所以还有5/6的概率是当前的期望次数+1
E = 1 6 × 1 + 5 6 × ( 1 + E ) E = \frac{1}{6} \times 1 +\frac{5}{6}\times (1+ E) E=61×1+65×(1+E)
E = 1 + 5 6 × E ⇒ E = 6 E = 1 + \frac{5}{6}\times E \Rightarrow E = 6 E=1+65×EE=6

5- 球涂白的次数期望

题目

一个桶有M个白球,每分钟从桶中随机抽取一个球涂成红色,在放回,求桶中全部球被涂红的期望

回答

期望次数:
E ( M ) = m m + m m − 1 + ⋯ + m 1 + 0 E(M) = \frac{m}{m} + \frac{m}{m-1}+ \dots + \frac{m}{1} +0 E(M)=mm+m1m++1m+0
分析方法论–数学归纳法:
假设桶中有 i i i个红球,再把所有球涂红的期望为 a [ i ] a[i] a[i]
1- 再取出一个球,红色的概率为 i M \frac{i}{M} Mi,剩余的期望为 a [ i ] a[i] a[i]
2- 再取出一个球,白色的概率为 1 − i M 1-\frac{i}{M} 1Mi,剩余的期望为 a [ i + 1 ] a[i+1] a[i+1]
⇒ \Rightarrow 递推公式:
a [ i ] = ( 1 + a [ i ] ) × i m + ( 1 − i m ) × ( 1 + a [ i + 1 ] ) a[i] = (1+a[i])\times \frac{i}{m} + (1- \frac{i}{m})\times(1+a[i+1]) a[i]=(1+a[i])×mi+(1mi)×(1+a[i+1])
又因为 a [ m ] = 0 a[m] = 0 a[m]=0
⇒ a [ 0 ] = E ( M ) = m m + m m − 1 + ⋯ + m 1 + 0 \Rightarrow a[0] = E(M) = \frac{m}{m} + \frac{m}{m-1}+ \dots + \frac{m}{1} +0 a[0]=E(M)=mm+m1m++1m+0

6- 宝剑升级次数的期望

问题

有一把宝剑,每使用一个保湿,有50%的概率会让宝石升一级,50%的概率会失败。如果宝石级别大于等于5,失败会让宝剑降一级,如果保健品级别小于5,失败没有效果,请问期望多少可以让一级宝剑升到9级?

回答

36次。
分析:
使用 a [ i ] a[i] a[i] 表示从 i − 1 i-1 i1 级升到 i i i 级期望的宝石数量。
(1) i<=5 时,a[2] = a[3]= a[4] = a[5] = 2
(2) i>5 时,从 i − 1 i-1 i1 级 到 i i i 级,因为会降级,成功的话消耗一个宝石,否则需要先使用 a [ i − 1 ] a[i-1] a[i1]个宝石升到 i − 1 i-1 i1级,然后再使用 a [ i ] a[i] a[i] 升到 i i i 级。
a [ i ] = 1 2 × 1 + 1 2 × ( 1 + a [ i − 1 ] + a [ i ] ) = 1 + 1 2 × a [ i − 1 ] + 1 2 a [ i ] a[i] = \frac{1}{2} \times 1 + \frac{1}{2} \times (1+a[i-1]+a[i]) = 1+ \frac{1}{2}\times a[i-1]+\frac{1}{2}a[i] a[i]=21×1+21×(1+a[i1]+a[i])=1+21×a[i1]+21a[i]
⇒ a [ i ] = a [ i − 1 ] + 2 \Rightarrow a[i] = a[i-1]+2 a[i]=a[i1]+2
从而: a[6] = 4, a[7] = 6 , a[8] = 8, a[9] = 10.
从一级升到9级: a [ 2 ] + a [ 3 ] + ⋯ + a [ 9 ] = 36 a[2] + a[3] + \dots + a[9] = 36 a[2]+a[3]++a[9]=36

超级好的文章:
(1)排列和组合讲解:https://www.zhihu.com/question/26094736

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值