gpt4 book ai didi

algorithm - 谷歌组合优化面试题

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:24:45 24 4
gpt4 key购买 nike

几周前我在谷歌的面试中被问到这个问题,我没有完全得到答案,我想知道这里是否有人可以帮助我。

您有一个包含 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

最佳答案

我认为我们可以使用动态规划来解决这个问题。

基本上,我们有:

f(i,j) is defined as the maximum sum of all expected values chosen from an array of size i and split into j subarrays. Therefore the solution should be f(n,k).

递归方程为:

f(i,j) = f(i-x,j-1) + sum(i-x+1,i)/x where (n/2k) <= x <= (3n/2k)

关于algorithm - 谷歌组合优化面试题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8189334/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com