小编Joh*_*ith的帖子

Google Combinatorial Optimization面试问题

几周前,我在谷歌的一次采访中被问到这个问题,我没有得到答案,我想知道这里是否有人可以帮助我.

你有一个包含n个元素的数组.元素为0或1.您希望将数组拆分为k 个连续的子数组.每个子阵列的大小可以在ceil(n/2k)和floor(3n/2k)之间变化.你可以假设k << n.将数组拆分为k个子数组后.将随机选择每个子阵列的一个元素.

设计一种算法,用于最大化k个子阵列中随机选择的元素的总和.基本上意味着我们希望以这样的方式分割数组,使得从每个子阵列中选择的元素的所有期望值的总和最大.

你可以假设n是2的幂.

Example:

Array: [0,0,1,1,0,0,1,1,0,1,1,0]
n = 12
k = 3
Size of subarrays can be: 2,3,4,5,6

Possible subarrays [0,0,1] [1,0,0,1] [1,0,1,1,0]
Expected Value of the sum of the elements randomly selected from the subarrays: 1/3 + 2/4 + 3/5 = 43/30 ~ 1.4333333 

Optimal split: [0,0,1,1,0,0][1,1][0,1,1,0]
Expected value of optimal split: 1/3 + 1 + 1/2 = 11/6 ~ 1.83333333
Run Code Online (Sandbox Code Playgroud)

algorithm math

12
推荐指数
2
解决办法
5327
查看次数

标签 统计

algorithm ×1

math ×1