【发布时间】:2012-02-16 20:39:25
【问题描述】:
我们有一个工人列表和一个分配给这些工人的任务列表。每个任务都属于特定类别(大约 50 个类别,大约 10000 个任务)。每个工人可以处理一组类别(每个工人大约 5 个类别)。此外,每个工人都有可以分配给他的最大数量的任务。
我们需要将任务分配给工人,以便
a) 可以分配的最大任务数
b) 没有为工人分配任务,该任务超出了工人类别集
c) 如果可以分配给他的任务,则没有工人处于闲置状态
d) 分配给任何工人的任务数应少于其最大分配数
样本数据:
a) 任务-类别关系
T1 - C1
T2 - C1
T3 - C1
T4 - C2
T5 - C1
T6 - C3
..... (around 10k tasks, 50 categories)
b) Workers-Categories-Max number of tasks
W1 (100) - C1
W1 (100) - C2
W2 (20) - C1
W2 (20) - C3
..... (around 50 workers, each can work on around 5 categories).
Where 100 for W1 means W1 can be assigned maximum 100 tasks
(across all categories, it is mapped with).
我试过循环遍历worker,得到关联的任务,一个一个地做任务,但是有一个漏洞,对于一些worker很少的类别,任务分配不公平,有些worker一直处于空闲状态而有些类别还有任务,可以通过将任务随机分配给其他工作人员来更有效地分配。
例如,如果 C1 有 2000 个任务,三个工作人员 W1、W2、W3 各有 1000 个最大任务。 C2 有 1000 个任务,仅与 W1 关联。 如果我们将 C1 任务分配给 W1 和 W2 到其全部容量(每个 1000 个任务),我们不能分配 C2 的任务,因为关联的工作人员 W1 已被 C1 完全占用。如果我们将 C1 任务分配给 W2 和 W3,我们可以分配所有任务。
我需要一些算法来有效和公平地完成任务。如果有人已经解决或知道我可以使用/探索的可能解决方案/资源,请提出建议。
【问题讨论】:
-
听起来像是功课。自己尝试一下,如果遇到特定问题,请询问。没有人会为你写作业。
-
同意,这听起来像家庭作业:),但想法是使用已经尝试和测试的解决方案来解决相同或类似的问题,或者只是指向我可以探索的资源的指针(如建议火焰)
标签: algorithm