创建具有约束的重叠集

时间:2016-04-10 19:41:34

标签: algorithm partitioning

我需要创建带有约束的重叠集,这些约束表示类似的项不应该一起出现。我有一个本地贪婪的算法,可以正常工作,但肯定会崩溃。我想知道是否有全局算法。

我想要以ns; s=8)的大小排列n>>s个项目。集合之间存在重叠,因此每个项目在所有集合中至少出现两次(如果mod(n,s/2)==0,则恰好两次)。此外,项目不应多次放在一个共同的集合中。

满足此要求的算法是将项目随机排列成n/2个集合,并通过从ii+1集合中选择一个元素来完成集i+s/2 (在i=0到达in处继续。

然而,存在限制。为简单起见,请说我的物品有颜色和形状。有很多颜色c和有限数量的形状p,即s << c < np<s。因此,虽然没有一个集合应该包含每种颜色的1个以上,但我允许每个集合最多包含3个。

我当前的算法迭代按顺序创建集合,然后尝试在集合之间交换项目以满足约束。我认为最好把它变成某种可以在全球范围内优化的分配问题,并且可能已经解决了这样的问题(或至少给出了一个名称)。有这样的算法吗?

0 个答案:

没有答案