令表示集合而C(n,k)表示来自的元素的所有组合的集合,没有重复。让是在元组。我们说一个置换 集合避免如果存在整数无k-元组使得 k [ n ] p = p 1 p 2。。。p k k C (n ,k )π :[ n ] → [ n ] [ n ] p i 1 < i 2 < 。。。< 我ķ π (我1)
例如,如果则置换避免作为子序列,而置换则不这样做。12453 134 1 2 3 5 4
问题:令为常数。给定一组的元组,找到一个置换 ,其避免各在元组。 小号⊂ Ç (Ñ ,ķ )ķ π :[ Ñ ] → [ Ñ ] ķ 小号
- 中有多项式的算法吗?和?在此,以一元形式给出。在时间运行的算法会很好。
- 还是这个问题NP完全?
欢迎提供有关此问题的任何参考或算法建议。请注意,上面定义的避免排列子序列的概念与仅元素的相对顺序很重要的避免排列模式的概念不同,并且似乎在组合学中得到了很好的研究。
您是说随机进行排列并验证它是否不违反S中的任何约束条件吗?随机多项式时间算法总比没有好。假定k为常数,因此根据定义它很小。但是我不知道如果S有很多约束,它将如何有效地工作。由于根据David的回答,问题是k = 3时的NPC,我有点怀疑随机算法是否有效。您能解释一下您的想法吗?
—
Mateus de Oliveira Oliveira
抱歉,我忽略了您有一组禁止的元组。无法保证拒绝采样将是有效的。
—
DW