EDIT: 只是为了确保有人不会在问题上破头...我不是在寻找最优算法。任何有意义的启发式方法都可以。
我之前尝试过表达这个问题,但意识到自己做得不够好,所以我删除了那个问题。我又试着表述了一下我的问题。请随意提供任何有助于改进的建设性批评。
输入:
- N个人 - 我可以发布的k个公告 - 我的声音可以传播的距离(比如5米),即我可以根据这5米内的人数决定是否发布公告
目标:
- 最大化听到我发布的k个公告的人数,并(可选)最小化完成所有k个公告所需的时间
约束条件:
- 一旦一个人听到了我的公告,他就从总数中被移除,即使他听到了我的第二个公告,我也不会再计算他 - 我可以看到与我接近的同一组人
例如:
假设有10个人,编号从1到10,按以下顺序到达:
- 时间段1:1(收益=1) - 时间段2:2 3 4 5(收益=4) - 时间段3:5 6 7 8(如果之前没有在时间段2中发布公告,则收益为4;如果在时间段2中发布了公告,则为3) - 时间段4:9 10(收益=2)
我需要发布2个公告。如果我是一个神谕,我会选择时间段2和时间段3,因为这样7个人会听到我的公告(因为5已经在时间段2中听到了我的公告,我不再考虑他)。我正在寻找一种在线算法,可以帮助我决定是否发布公告,如果发布的话,则基于哪些因素。是否有人对解决这个问题或更简单版本的问题有什么想法?
我之前尝试过表达这个问题,但意识到自己做得不够好,所以我删除了那个问题。我又试着表述了一下我的问题。请随意提供任何有助于改进的建设性批评。
输入:
- N个人 - 我可以发布的k个公告 - 我的声音可以传播的距离(比如5米),即我可以根据这5米内的人数决定是否发布公告
目标:
- 最大化听到我发布的k个公告的人数,并(可选)最小化完成所有k个公告所需的时间
约束条件:
- 一旦一个人听到了我的公告,他就从总数中被移除,即使他听到了我的第二个公告,我也不会再计算他 - 我可以看到与我接近的同一组人
例如:
假设有10个人,编号从1到10,按以下顺序到达:
- 时间段1:1(收益=1) - 时间段2:2 3 4 5(收益=4) - 时间段3:5 6 7 8(如果之前没有在时间段2中发布公告,则收益为4;如果在时间段2中发布了公告,则为3) - 时间段4:9 10(收益=2)
我需要发布2个公告。如果我是一个神谕,我会选择时间段2和时间段3,因为这样7个人会听到我的公告(因为5已经在时间段2中听到了我的公告,我不再考虑他)。我正在寻找一种在线算法,可以帮助我决定是否发布公告,如果发布的话,则基于哪些因素。是否有人对解决这个问题或更简单版本的问题有什么想法?