【问题标题】:Algorithm to find the correct combination in a fast manner快速找到正确组合的算法
【发布时间】:2021-03-22 11:32:19
【问题描述】:

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

  • 目前我首先遍历作业,我们称之为 jobLoop
  • jobLoop 内部我正在循环通过workerLoop,检查是否 工人有空,并且具备完成工作所需的能力。
  • 如果工作人员正常,我将循环通过mechanismLoop,检查工作人员是否可以使用该机制以及该机制是否可用。如果没有可用的机制,我会退回到workerLoop,寻找另一个合适的工人。
  • 如果机制正常,我循环访问mechEquipmentLoop,检查工人是否可以使用设备以及设备是否可用。如果没有可用的设备,我会退回到mechanismLoop,寻找另一个正确的机制。
  • 如果机械设备最终没问题,则算法完成。如果不匹配,算法会说项目无法匹配。

这是一个简化版本,每一步都有许多检查,比如是否允许工作人员在完成工作的对象上进行等等。

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

【问题讨论】:

    标签: algorithm logic


    【解决方案1】:

    恕我直言 - 这个算法是 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)。

    【讨论】:

      猜你喜欢
      • 2018-05-29
      • 2014-11-05
      • 1970-01-01
      • 1970-01-01
      • 2010-11-14
      • 1970-01-01
      • 1970-01-01
      • 2011-11-12
      • 2012-07-23
      相关资源
      最近更新 更多