生成具有限制的随机多集排列

时间:2012-08-09 10:38:30

标签: permutation combinatorics

是否有任何已知的算法如何有效地生成具有附加限制的任何随机多集排列。

实施例: 我有多个项目,例如:{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,等等。

符合限制的一种排列是:{3,1,1,1,2,2,3,3}

1 个答案:

答案 0 :(得分:2)

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

您的示例的二分图如下所示: enter image description here

现在,匹配以不选择两个相邻边的方式选择边。例如。第一个“1”被选择用于第二个限制“{1,2}”,然后它不能再用于任何其他限制,因为使用来自该顶点的另一个边缘将不再导致匹配。

如果您对此有另一个问题,请随时询问。