一道腾讯 WXG 面试题
Posted 澤部椿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一道腾讯 WXG 面试题相关的知识,希望对你有一定的参考价值。
问题:两块广告牌,五个广告商,设计一个算法,在一段时间内五个广告商的广告出现次数为1:2:3:4:5,注意两个广告牌不能同时播同一个广告。
考虑只有一个广告牌,则只需要按照以下概率选择对应的广告播放即可
P
=
[
1
15
,
2
15
,
3
15
,
4
15
,
5
15
]
P=[\\frac115,\\ \\frac215,\\ \\frac315,\\ \\frac415,\\ \\frac515]
P=[151, 152, 153, 154, 155]
具体实现是通过轮盘赌算法
,即产生一个[0, 1)区间上的随机数
r
r
r,根据
r
r
r落在累积概率区间的位置选择对应的广告。累积概率为
P
c
u
m
s
u
m
=
[
1
15
,
3
15
,
6
15
,
10
15
,
15
15
]
P_cumsum=[\\frac115 ,\\ \\frac315 ,\\ \\frac615 ,\\ \\frac1015,\\ \\frac1515]
Pcumsum=[151, 153, 156, 1510, 1515]
若
r
≤
1
15
r\\leq\\frac115
r≤151,则选择第1个广告;若
1
15
<
r
≤
3
15
\\frac115<r\\leq \\frac315
151<r≤153,则选择第2个广告;以此类推…
相应的实现代码为
from random import random
N = 1000000
cnt_dict = '1':0, '2':0, '3':0, '4':0, '5':0
for i in range(N):
r = random()
if r<1/15:
cnt_dict['1'] += 1
elif r<3/15:
cnt_dict['2'] += 1
elif r<6/15:
cnt_dict['3'] += 1
elif r<10/15:
cnt_dict['4'] += 1
else:
cnt_dict['5'] += 1
prob = [float(':.3f'.format(ele/sum(cnt_dict.values()))) for ele in cnt_dict.values()]
prob_required = [float(':.3f'.format(i/15)) for i in range(1,6)]
print(prob_required)
print(prob)
现在考虑有2个广告牌的情况,若没有2个广告牌不能同时播放同一广告
这一限制,那么只需要两个广告牌相互独立地进行上面的操作即可。但题目要求两个广告牌不能同时播放相同的广告,考虑让其中的一个广告牌按照上面的方法先选择一个广告播放,然后在剩下的广告中按照某种概率选择出一个在另外一个广告牌播放。一种实现方法是,若选择了广告1和4,则另外一个广告牌播放广告5;若选择了5,则以
2
5
\\frac25
52的概率选择广告2在另一个广告牌播放,以
3
5
\\frac35
53的概率选择广告3在另一个广告牌播放;若选择了广告2,则等概的选择1和4在另一广告牌播放,若选择了广告3,则选择广告4在另一广告牌播放。
具体实现如下
from random import random
N = 1000000
cnt_dict = '1':0, '2':0, '3':0, '4':0, '5':0
for i in range(N):
r = random()
if r<1/15:
cnt_dict['1'] += 1
cnt_dict['5'] += 1
elif r<3/15:
cnt_dict['2'] += 1
if random()<1/2:
cnt_dict['1'] += 1
else:
cnt_dict['4'] += 1
elif r<6/15:
cnt_dict['3'] += 1
cnt_dict['4'] += 1
elif r<10/15:
cnt_dict['4'] += 1
cnt_dict['5'] += 1
else:
cnt_dict['5'] += 1
if random()<2/5:
cnt_dict['2'] += 1
else:
cnt_dict['3'] += 1
prob = [float(':.3f'.format(ele/sum(cnt_dict.values()))) for ele in cnt_dict.values()]
prob_required = [float(':.3f'.format(i/15)) for i in range(1,6)]
print(prob_required)
print(prob)
以上是关于一道腾讯 WXG 面试题的主要内容,如果未能解决你的问题,请参考以下文章