【发布时间】:2010-05-07 16:15:59
【问题描述】:
我有一组项目,例如:{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}
是否有一种算法可以计算这个问题的所有排列?这类问题有名称吗?
为了说明,我知道如何为某些类型的“限制集”解决这个问题。 项目集:{1,1,2,2,3},限制条件 {{1,2},{1,2,3},{1,2,3},{1,2},{1,2 }}。这等于 2!/(2-1)!/1! * 4!/2!/2!。首先有效地排列 3,因为它是最严格的,然后在有空间的地方排列剩余的项目。
还有……多项式时间。这可能吗?
更新:这将在下面的链接中进一步讨论。上面的问题称为“计算完美匹配”,上面的每个排列限制都由插槽矩阵上的 {0,1} 表示。
【问题讨论】:
-
您是在寻找一个计数,还是对一种也可以打印排列的算法感兴趣?无论如何,这必须有多高效?
-
你的问题对我来说看起来很有趣,但我并不完全理解。
-
计数就可以了。因为如果需要,我可以递归地应用计数算法来遍历或随机访问第 n 个排列。算法/分析方法必须在多项式时间内,而不是明显的“遍历所有排列并删除不符合规则的排列”算法。好问题。对我来说,方程和算法一样好。参考类似的分析方法或学术出版物也会对我有所帮助。
-
在mathoverflow.net你可能会有更好的运气
-
我对一些事情感到困惑:集合通常是无序的,并且每个元素只有一个,但我想你在谈论“有序多集合”之类的?此外,如果有 k 个限制集,这是否意味着所有排列的长度都必须为 k?输出的长度、输入多重集的大小和限制集的数量之间有什么关系?
标签: algorithm math permutation combinatorics