快速找到正确组合的算法

Algorithm to find the correct combination in a fast manner

假设我有4个列表:工作、工人、机制和机制设备。

这是一个简化版本,在每个步骤中都有许多检查,例如是否允许在完成作业的对象上使用 worker 等。

我正在想一个更有效的方法来做到这一点。目前这个算法的时间复杂度应该大概是O(n^4)吧?我不是在寻找代码,只是在寻找有关如何执行此操作的指导。

恕我直言 - 这个算法是 O(jwm*e) 而不是 O(n^4)。 j = 职位数,w = 工人数,m = 机械数,e = 机械设备数。

如果这些列表不变并且只需要一次答案,那么这是执行的最佳算法。您至少需要访问所有输入一次。

假设这些列表发生变化,并且同一算法需要针对给定作业多次执行,您可以这样做。

将工人列表存储在 BST(或自平衡树状 AVL)中,以工作能力为关键字。假设如果一个工人有多种能力,那么他的数据将包含在所有能力中。树的创建是 O(wlogw),这里 w 是唯一能力和工人组合的数量,而不是单独的工人数量。删除、添加和搜索将是 O(logw)。这里我们假设能力 - 工人分布是体面的。假设如果所有工人都只有一种能力,这将再次变为 O(w)。

同样适用于机制和设备。这将使每个级别的搜索达到 O(logm) 和 O(loge)。

因此,对于每个作业,分配的最佳情况是 O(logw * logm * loge),开销为 O(wlogw + mlogm + eloge)。对于所有作业,它将是 (j * logw * logm * loge)。