只有两个工人的任务成本最小化


Minimize task cost with only two workers

我正在尝试使用PHP创建一个算法,通过选择两个可以尽可能便宜地完成这些任务的工人来找出完成一组任务的最佳方法。

假设我有一组X个不同的任务和Y个不同的工人。每个工人可以以不同的价格完成X个任务中的每一个。您可以假设我有一个表,显示每个工人和每个任务,工人完成任务所需的价格。

我的问题是:给定这样一个表,我如何找到恰好两个工人的集合,他们可以以最小的总成本完成所有任务?

解决这个问题的一个非常简单的方法是考虑所有可能的两个工人对,然后计算如果这两个工人最优地分配所有工作的成本。一旦你有了这些值,你就可以取其中最小的值来得到最小的总成本。

现在,让我们看看如果使用一对特定的工人,如何计算完成所有X个任务的总成本。从你的问题描述来看,似乎每个工人都没有限制他们能做多少,这使得这个问题比许多相关问题要容易得多。直觉是这样的:对于任何任务,您都希望将该任务交给比其他任务成本更低的工人。因此,在两个工人之间分配所有任务的总成本可以通过循环遍历每个任务,然后将该任务分配给可以以更少的钱完成该任务的工人来找到。

总的来说,我建议按以下方法处理这个问题。使用double for循环,遍历每一对工作者。对于每一对,使用第三个For循环遍历每个任务,计算完成该任务的总成本。最后,如果这对比目前最知名的一对更好,更新你的猜测,就是这对。一旦你对每一对工人运行这个循环,你就会找到能以最低总价格完成这项工作的那对。

由于有O(Y2)对工人和X个总任务,这将在O(Y2X)时间内完成。

希望这对你有帮助!

这是一个可以用动态规划方法求解的优化问题。你的特殊问题(我认为)属于资源分配受到财政限制的范畴。像背包问题这样的标准问题也包含在其中。

至少有一个关于堆栈溢出的问题,要求使用php解决此类问题。在那篇文章中有一个php解决背包问题的链接。我将从该代码开始,并将其转换为处理特定问题定义所需的代码。