我有n个项目.每个项目具有值v_i和连续概率p_i.我要玩一个游戏,我选择一个项目,获得它的价值,然后继续玩相应的概率.如果我继续,我可以拿起任何剩余的项目,将其值添加到我的总和中,并再次受其持续概率的影响.如果我很幸运,我可以玩,直到没有物品离开.我想选择一个订单来最大化我的预期价值.
有没有一种有效的算法来解决这个问题?
最佳答案 你的观察是正确的!您应该按v_i /(1 – p_i)排序并按该顺序列出项目.
要了解其工作原理,让我们先看一下两项案例.假设您有两个项目(v1,p1)和(v2,p2).我们的目标是定义某种有序关系≥使得(v1,p1)≥(v2,p2)如果预期的拣选奖励(v1,p1)优先于预期的拣选奖励(v2,p2)第一.
如果你首先选择(v1,p1),你的预期奖励是v1 p1 v2,如果你先选择(v2,p2),你的预期奖励是v2 p2 v1.我们想确定必须发生的事情
v1 + p1 v2 ≥ v2 + p2 v1
发生.通过一些代数,我们得到这种情况,当且仅当
v1 – p2 v1 ≥ v2 – p1 v2
v1 (1 – p2) ≥ v2 (1 – p1)
v1 / (1 – p1) ≥ v2 / (1 – p2)
这是你之前发现的.
现在,假设您按照您喜欢的任何顺序选择元素.让我们根据它们出现的顺序将它们编号为v1,v2,…,vn.现在想象一下,您已经选择了这些项目,以便它们不会按照上面给出的顺序降序排列.这意味着必须有两个相邻的术语无序.让我们第一次发生v_i.然后预期的奖励将是
v1 + p1(v2 + p2(v3 + p3(…(v_i + p_i(v_{i+1} + p_{i+1}X))…)
其中X是其余术语的值.想象一下,您交换项目v_ {i 1}和v_i并将其他所有内容都保留.那你的奖励就是
v1 + p1(v2 + p2(v3 + p3(…(v_{i+1} + p_{i+1}(v_i + p_i X))…)
由于这里的主要术语是平等的并且都是非负的,我们现在可以忽略它们并专注于核心术语
v_i + p_i(v_{i+1} + p_{i+1} X)
和
v_{i+1} + p_{i+1}(v_i + p_i X)
我们知道v_i和v_ {i 1}是乱序的,所以
v_i + p_i v_{i+1} ≤ v_{i+1} + p_{i+1} v_i
因此,假设我们执行交换,我们就会看到
v_i + p_i(v_{i+1} + p_{i+1} X)
= v_i + p_i v_{i+1} + p_i p_{i+1} X
≤ v_{i+1} + p_{i+1} v_i + p_i p_{i+1} X
= v_{i+1} + p_{i+1}(v_i + p_i X)
这意味着期望值只能随着我们使序列更加排序而上升,因此按v_i /(1 – p_i)降序排序的贪婪解决方案确实是最佳解决方案!
所以,是的.按v_i /(1 – p_i)排序并按顺序列出内容.