我需要一些关于植物分组分配算法的想法。我有,比如说5套植物,每一套都描绘了一个特定的属性,例如,

setA= {set of all plants that are green in color}

setB = {set of all plants red in color}

setC={ all the plants that are roots also}

setD= {fruits}

setE= [flowers}

一个植物可以是多个集合的成员植物的总数是“N”,我有“M”篮子。所需要的是将所有这些“n”种植物分布在“m”篮子中,以便对于每一组,所有篮子中的植物数量相等(或几乎相等)。问题来了如果我开始在“m”篮子中为每一组一个地分配,那么在大多数情况下,最后一个分配将是唯一有效的分配,即篮子中的花将均匀分布,但不一定是水果、根或颜色等。
如何平均分配所有这些有什么想法吗?

最佳答案

这是maximum match problem in a bipartite graph的变体。
你有20种植物和5组。然后,第一组节点将由20个植物和另一个5个篮子组成,但每个篮子将呈现4次(也就是总共20个节点)。
现在,你只需要匹配20个植物到20个篮子节点,这正是上面的问题。
如果n不能被m整除,则可以添加一些备用busket节点。例如,如果n = 23m = 5,您可以重复每个篮子5次。当找到完全匹配时,busket集仍然有两个(5*5 - 23)空闲节点。
为了使“几乎相等”的需求更好地工作(当没有完全匹配时),可以改为使图加权也就是说,绿花篮1成本1,绿花篮2成本2,绿花篮3成本4等。
wikipedia为所有类型的max匹配问题提供了算法,而且还有实现库。

关于algorithm - 将来自“x”组植物的物品平均分配到“y”篮中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2591841/

10-12 19:14