algorithm - 将 "x"组植物中的元素平均分配到 "y"篮子中

标签 algorithm logic set

我需要有关植物分组分布算法的想法。我有 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 整除,您可以添加一些备用总线节点。例如,如果 n = 23m = 5,您可以将每个篮子重复 5 次。当找到完美匹配时,busket-set 仍将有两个 (5*5 - 23) 个空闲节点。

为了使“几乎相等”的要求更好地发挥作用(当没有完美匹配时),您可以改为对图表进行加权。即,greenPlantsBasket#1 花费 1,greenPlantsBasket#2 花费 2,greenPlantsBasket#3 花费 4,等等。

维基百科提供了各种最大匹配问题的算法,也有实现库。

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

相关文章:

algorithm - 在最接近给定点的圆上找到点的最佳方法

c - do-while 语句中的逻辑错误?

python - 创建原子集列表

bash set -e and i=0;让i++不同意

c++ - 生成唯一的序列 ID

c++ - 删除字符串算法中的重复项

php - 插入和选择排序比较和交换时间是否相等?

logic - 如何在 coq 中向后使用引理 a=b ?

MySQL/SQL 排序依据和条件

java - 有没有一种方法可以操作通用类型的集合?