2012-08-09 28 views
3

是否存在任何已知算法如何有效地产生具有附加限制的任意随机多重排列。有限制的随机多重排列的产生

实施例: 我有项的多集,例如:{1,1,1,2,2,3,3,3},和限制集合的集合,例如{{3}{1,2}{1,2,3}{1,2,3}{1,2,3}{1,2,3}{2,3}{2,3}}。我在寻找项目的排列,但第一个元素必须是3,第二个必须是1或2,等

一个这样的排列,适合限制是:

回答

2

是的,有。我在this German forum询问并得到以下答案:问题可以简化为找到a maximum matching on a bipartite graph。 为了做到这一点,介绍multiset中所有元素的顶点。这些顶点形成了二分图的一侧。然后,为每个限制集引入顶点。这些顶点构成了二分图的另一侧。现在,将每个限制集中的边缘引入到第一侧上的顶点,使得当且仅当它表示包含在连接集中的元素时,第一侧上的顶点才是“命中”。

您例如二分图是这样的: enter image description here

现在匹配的是两个相邻的边缘选择的方式选择边缘。例如。为第二个限制“{1,2}”选择第一个“1”,那么它就不能再用于任何其他限制,因为从这个顶点使用另一个边将不会再导致匹配。

如果您对此有其他疑问,请随时提问。