只需两名工人即可最大限度地降低任务成本

时间:2011-08-19 01:59:56

标签: php algorithm

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

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

我的问题是:给定这样一个表格,我如何找到能够以最低总成本完成所有任务的正好两个工作人员?

2 个答案:

答案 0 :(得分:1)

解决这个问题的一个非常简单的方法是考虑所有可能的两个工人对,然后计算成本,如果这两个工人要最佳地划分所有工作。获得这些值后,您可以只取最小值来获得最小的总成本。

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

总的来说,我建议如下处理此问题。使用双循环,遍历每对工人。对于每对,使用第三个for循环迭代每个任务,计算完成该任务的总成本。最后,如果这一对比目前为止最着名的对更好,请将您的猜测更新为此特定对。一旦你在每对​​工人身上运行这个循环,你就会找到能够以最低总价格完成这一对的人。

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

希望这有帮助!

答案 1 :(得分:0)

这是一个可以使用dynamic programming方法解决的优化问题。您的特定问题(我认为)属于财务限制的resource allocation类别。像knapsack problem这样的标准问题也包括在内。

堆栈溢出中至少有一个question要求使用php解决此类问题。在那篇文章中,有一个链接到背包问题的php解决方案。我从that code开始,将其转换为您需要处理特定问题定义所需的内容。