如何在多项式时间内进行置换?

时间:2015-04-11 11:14:12

标签: permutation

我有一个问题,就是要求使用字母和关系的排列。即:n1,n2,n3和(=,>)。

我知道使用字母{(n1,n2,n3),(n1,n3,n2)进行排列的递归方式....... - 在上面的问题中,我想插入关系=或者&lt ;。所以它会像:

{(n1=n2=n3),(n1=n2<n3),(n1<n2=n3),(n1<n2<n3),(n2<n1=n3),(n2<n1<n3),(n2<n3<n1),(n‌​2=n3<n1),(n3<n1<n2),(n3<n2<n1)}

问题是如何打印所有可能的排列,这应该是多项式时间。

我认为使用动态编程可以减少时间复杂度,但无法弄明白。

非常感谢任何帮助!

由于

1 个答案:

答案 0 :(得分:0)

您无法在多项式时间内打印所有排列,因为有N!可能的排列,打印东西本身就是一种行为。在字母之间插入符号乘以另一个2 **(N-1)。这两个因素都是非多项式的。