我正在从旧的编程竞赛中解决一些示例问题。在这个问题中,我们得到了我们有多少调酒师的信息,以及他们知道的食谱。每个鸡尾酒需要1分钟制作,我们需要使用所有调酒师计算订单是否可以在5分钟内完成。
解决这个问题的关键是尽可能高效地分配鸡尾酒。那就是我被困住的地方,我现在的算法给那些知道最少其他食谱的调酒师下了订单。但当然,这还不是100%正确。任何人都可以指出我正确的方向(或给我一个谷歌的算法名称),这解决了这个“酒保问题”?
答案 0 :(得分:7)
这可以通过流量网络来解决。
计算从源到接收器的maximum flow。如果任何订单仍未履行,则无法解决。
答案 1 :(得分:1)
在订单上创建鸡尾酒列表,按照多少招标知道如何制作鸡尾酒来排序
即订单是为了 (2 * CocktailA,1 * CocktailB,2 * CocktailC,1 * CocktailD)
CocktailA可以通过4次招标(招标A,B,C,D)制作 CocktailA可以通过4次招标(招标A,B,C,D)制作 CocktailB可以通过3次招标(招标A,B,C)制作 CocktailC可以通过1招(招标A)制作 CocktailC可以通过1招(招标A)制作 CocktailD可以通过1招(招标B)制作
通过该列表向后工作,将作业分配给投标。如果多次招标可以制作鸡尾酒,那么选择已经分配了最少工作量的鸡尾酒。
CocktailD =投标B
CocktailC =投标A
CocktailC =投标A(再次)
CocktailB =投标C
CocktailA =投标D
CocktailA =投标B(再次)
招标A和B都有2个工作,所以订单需要2分钟。
答案 2 :(得分:1)
这是一个顶点着色问题。它完全类似于非常好研究的寄存器分配问题。见http://en.wikipedia.org/wiki/Register_allocation。它也可以被认为是一个类似于顶点着色的集合覆盖问题。
当然,在这里我们不需要找到实际的着色,我们只需要确定它的基数是否为5或更小。如果酒保图表可以用5种或更少的颜色着色,那么答案是肯定的,否则不是。这是另一篇很好的论文,用“任务”,“天”和“机器”来描述问题:http://www.polymtl.ca/pub/sites/lagrapheur/docs/en/documents/NotesChap7.pdf
现在,为了弄清楚这一点,图中所谓的“色数”或“色度指数”是NP难的。事实上,有人已经在SO上要求一个算法来查找图的色数,但不幸的是没有得到很多响应,请参阅Algorithm for Chromatic Number of a Graph?
只是浏览网页,我确实找到了一些用于着色的代码资源。可以解决这个问题的人称为SMALLK。 SMALLK可以找到最多8个颜色。由于我们只需要5个问题,这个包可以做到。
答案 3 :(得分:0)
这是college matching problem的变体。饮料是学生,调酒师是大学。反过来,它是stable marriage problem的概括,可能对你有用。