这是我的一个朋友问的。我以前没有上下文,所以我想知道这个问题属于哪种算法类型。任何提示或建议都可以。
假设我们有一组N名工人在汽车装配线上工作。每个工人可以做3种类型的工作,他们的技能等级从1到10.例如,工人1"油漆表面"效率等级为8,但"组装发动机"效率仅为5级。
经理有一个由开始时间,持续时间,工作类型和重要性定义的M个工作列表,从0到1评级。每个工人一次只能处理1个工作,1个工作可以工作1个工人。管理者如何正确分配工作以获得最大产出?
作业的最大输出=工人技能等级*工作重要性*持续时间。
例如,我们有工人{w1,w2}
w1: paint_skill = 9, engine_skill = 8
w2: paint_skill = 10,engine_skill = 5
我们有工作{j1,j2}
j1: paint job, start_time = 0, duration = 10, importance = 0.5
j2: engine job, start_time = 3, duration = 10, importance = 0.9
我们应该将w1分配给j2,将w2分配给j1。输出= 8 * 10 * 0.5 + 10 * 10 * 0.9 = 40 + 90 = 130
一个贪婪的解决方案将下一个可用的工作人员与下一个工作相匹配显然是次优的,因为我们可以将w1与j1匹配,这不是最佳的。
详尽的暴力解决方案可以保证最佳输出,但会使用大量作业列表以指数级的时间进行计算。
如何解决这个问题?