你能帮我设计一个算法并证明这个问题吗?

问题描述

我正在尝试为我的作业中给出的这个问题找到一个算法:

假设您有 m 个作业和 n 台机器。我的每台机器都有一个 非递减延迟函数 li : N → R 仅取决于 分配给机器 i 的作业数。为了说明,如果 lj(5) = 7, 那么如果机器 j 被分配(任何),它需要工作 7 个单位的时间 五个工作。假设所有机器 i 的 li(0) = 0。

给定一个 一组 m 个作业和 n 台机器,其中每台机器与一个 如上所述的非递减延迟函数。你被要求 给出一个 O(m · lgn) 算法,该算法将每个作业分配给一台机器,例如 makespan(任何机器执行的最长时间)是 最小化。不用说,但为了以防万一,你需要证明 你的算法是正确的。

我可以得到一些帮助,所以这不是作弊。

我被困在从哪里以及如何开始寻找解决这个问题的算法,你能帮我吗?

解决方法

O(m · lgn) 是个好线索。

分配每个 m 作业需要 O(logn) 时间吗?显然,机器应该按照某种数据结构组织起来,每个操作的时间都是如此。

考虑基于二叉堆的优先级队列。