Permutation 带约束的随机多集置换的生成

Permutation 带约束的随机多集置换的生成,permutation,combinatorics,Permutation,Combinatorics,是否有任何已知的算法可以有效地生成具有附加限制的任意随机多集置换 例如: 我有一个多项目集,例如:{1,1,1,2,2,3,3},和一个限制集,例如{{3},{1,2},{1,2,3},{1,2,3},{1,2,3},{1,2,3}。我在寻找项目的排列,但第一个元素必须是3,第二个元素必须是1或2,以此类推 符合限制条件的一种排列是:{3,1,1,2,2,3,3}是的,有。我问了一下,得到了以下答案:问题可以归结为寻找。 为此,请为多重集中的所有元素引入顶点。这些顶点构成二部图的一侧。然后,为每

是否有任何已知的算法可以有效地生成具有附加限制的任意随机多集置换

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

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

是的,有。我问了一下,得到了以下答案:问题可以归结为寻找。 为此,请为多重集中的所有元素引入顶点。这些顶点构成二部图的一侧。然后,为每个限制集引入顶点。这些顶点构成二部图的另一侧。现在,将每个限制集的边引入到第一个边上的顶点,这样,当且仅当第一个边上的顶点表示连接集中包含的元素时,才会“命中”

您示例中的二部图如下所示:

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

如果你还有其他问题,请随时提问